Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Weryfikacja domeny
Forum PHP.pl > Forum > Przedszkole
DannyM
Czy da sie jakos zabezpieczyc skrypt weryfikujac domene?
Moze zakodowac jej nazwe w bazie i potem sprawdzac?
kkuba
Można.
Ale nie ma bata, żeby tego nie usunąć.

No chyba, że laikowi dajesz skrypt : )
pgrzelka
jedyne rozwiązanie to zakodowanie skryptu np Ioncube lub zend optimizer
DannyM
to to juz czytalem ale jak by tak dla laika zakodowac md5 domene i potem sprawdzac?
no chyba, ze macie inne pomysly
kkuba
Pomysł może i dobry, ale każdy, kto podstawy zna, poradzi sobie z usunięciem jednego if'a.

Wg. mnie.. jeśli chcesz coś tylko dla siebie - nie rozdawaj ; )
pgrzelka
jak laik to zakoduj base64, potem zdekoduj, i wykonaj eval()

możesz też zakodować coś takiego

if ($domena != 'dozwolonadomena') {
mail(twoj@mail, 'naruszenie', 'klient umiescil skrypt na innej domenie');
}
DannyM
Wlasnie to staram sie zrobic ale nie wycgodzi mi sprawdzanie smile.gif

  1. <?php
  2. $uni = "http://localhost:8888/";
  3.  
  4. $sha1a =  base64_encode($uni);
  5. echo ("Domena:  " . $sha1a . "\n");
  6.  
  7. if (  base64_decode($sha1a) == "http://localhost:8888/" ) { echo " > wszysklo gra";} else {echo "Blee";}
  8. ?>

Tak wygladaja moje wypociny i nie dzialaja
Juz wiem "sha1"
Teraz gra winksmiley.jpg
deirathe
Ja przez pewien czas, miałem jeden plik biblioteczny z klasami podstawowymi, który był zakodowany basem z dodatkowo z moim małym ulepszeniem tongue.gif. Skrypt na serwerze klienta ściągał pliczek z mojego serwera, pobierał dodatkowo numer, który był potrzebny do odkodowania biblioteki. Jeżeli domena z której pobierany był numer różniła się od tej które miałem zapisane w dozwolnych, to klient dostawał paczkę której nie można było odkodować.
Jeżeli ktoś by się napocił to można to obejść zawsze, ale na laików dobre zabezpieczenie. Jedyny ból że spowalnia to aplikacje u klienta.
phpion
Cytat(DannyM @ 25.05.2009, 15:12:15 ) *
Wlasnie to staram sie zrobic ale nie wycgodzi mi sprawdzanie smile.gif

  1. <?php
  2. $uni = "http://localhost:8888/";
  3.  
  4. $sha1a =  base64_encode($uni);
  5. echo ("Domena:  " . $sha1a . "\n");
  6.  
  7. if (  base64_decode($sha1a) == "http://localhost:8888/" ) { echo " > wszysklo gra";} else {echo "Blee";}
  8. ?>

Tak wygladaja moje wypociny i nie dzialaja
Juz wiem "sha1"
Teraz gra winksmiley.jpg

Pozwól, że "obejdę" Twój skrypt. Cokolwiek nie dasz w warunkach mogę go bardzo prosto "złamać":
  1. <?php
  2. $uni = "http://localhost:8888/";
  3.  
  4. $sha1a =  base64_encode($uni);
  5. echo ("Domena:  " . $sha1a . "\n");
  6.  
  7. //if (  base64_decode($sha1a) == "http://localhost:8888/" ) { echo " > wszysklo gra";} else {echo "Blee";}
  8. ?>

guitar.gif
DannyM
hehe no tak ale nie tak prosto bedzie winksmiley.jpg
Tu tylko chcialem zrozumiec jego dzialanie biggrin.gif
No i jeszcze jedna sprawa trzeba wiedziec w calym kodzie co wylaczyc winksmiley.jpg
vokiel
Jeżeli sprawdzanie warunków będzie u klienta, to musisz chociażby funcje, zmienne ponazywać jakoś inaczej dla zmylenia. Ukryć to w wielu miejscach.

Jeśli nie chcesz szyfrować, to zrób coś na wzrór deirathe. Na swoim serwrze umieszczasz jakąś najważniejszą część swojej aplikacji, taki rdzeń. W skrypcie odwołujesz się do serwera, ale nie tak, że sprawdzasz czy dany id ma dostęp czy nie, tylko pobierasz skrypt, i go evalem wykonujesz u klienta.

Czyli coś na zasadzie eval(file_get_contents('http://check.twojadomena.pl?key=242h2k34hj2h3k2h'));

Pozdrówki
DannyM
Cytat(vokiel @ 25.05.2009, 22:24:18 ) *
Jeżeli sprawdzanie warunków będzie u klienta, to musisz chociażby funcje, zmienne ponazywać jakoś inaczej dla zmylenia. Ukryć to w wielu miejscach.

Jeśli nie chcesz szyfrować, to zrób coś na wzrór deirathe. Na swoim serwrze umieszczasz jakąś najważniejszą część swojej aplikacji, taki rdzeń. W skrypcie odwołujesz się do serwera, ale nie tak, że sprawdzasz czy dany id ma dostęp czy nie, tylko pobierasz skrypt, i go evalem wykonujesz u klienta.

Czyli coś na zasadzie eval(file_get_contents('http://check.twojadomena.pl?key=242h2k34hj2h3k2h'));

Pozdrówki

Dzieki za podpowiedz a czy takie odwolanie nie spowoduje duzego ruchu na serwerze?
Jesli np. do danego pliku odwola sie 100 klientow w ciagu godziny czy mocno obciazy to serwer?
nospor
No ale przeciez odwolywanie sie do serwera po "rdzen" to takie same "zabezpieczenie" co walenie ifow w roznych miejsach kodu. Mozna je tak samo latwo obejsc. wystarczy raz zciągnąc ten "rdzen", zapisac do pliku i nastepnym razem siorbac juz z pliku a nie z serwera. - zabezpieczenie nie dosc ze tak samo latwe do obejscia co poprzednie, to na dodatek bedzie tylko przymulac i aplikacje, i serwer kolesia co zrobil projekt.
wNogachSpisz
Zrob tak, zeby twoj soft byl latwy do znalezienia w google, np. specyficzne URLe, specyficzne intext. Potem raz na jakis czas przelecisz wujaszka G i sprawdzisz czy ktos nie korzysta z Twojego softu na niedozwolonej domenie.
DannyM
Cytat(wNogachSpisz @ 26.05.2009, 09:54:43 ) *
Zrob tak, zeby twoj soft byl latwy do znalezienia w google, np. specyficzne URLe, specyficzne intext. Potem raz na jakis czas przelecisz wujaszka G i sprawdzisz czy ktos nie korzysta z Twojego softu na niedozwolonej domenie.

hehe super pomysl smile.gif
Choc wateków podobnych jest kilka to ten jest świeży i zaczyna sie rozkrecac winksmiley.jpg
vokiel
Cytat(nospor @ 26.05.2009, 08:01:31 ) *
No ale przeciez odwolywanie sie do serwera po "rdzen" to takie same "zabezpieczenie" co walenie ifow w roznych miejsach kodu. Mozna je tak samo latwo obejsc. wystarczy raz zciągnąc ten "rdzen", zapisac do pliku i nastepnym razem siorbac juz z pliku a nie z serwera. - zabezpieczenie nie dosc ze tak samo latwe do obejscia co poprzednie, to na dodatek bedzie tylko przymulac i aplikacje, i serwer kolesia co zrobil projekt.

A no racja, tyle, że musi się pojawić pierwszy ktoś, kto kupi skrypt i go udostępni.
Jest jeszcze opcja, żeby robic buildy dla każdego klienta indywidualne, w których jakieś funkcje będą się inaczej nazywały, a pobrana treść z serwera, wywoływana evalem będzie się do nich odnosić. Co prawda to i tak jest do obejścia, ale ciut utrudni dry.gif

Specyficzne URL'e to jest jakiś sposób, bo może komuś nie będzie się chciało przerabiać skryptu.

Wyrzucenie ifa, czy unikalnego znacznika jest zawsze do zrobienia. Moża próbować zamotać tak kod, żeby się komuś nie chciało grzebać i szukać, ale jeśli ktoś użyje jakiegoś IDE to z tym też w miarę szybko sobie poradzi.

Tak czy inaczej, jeśli kod nie jest zaszyfrowany, to zawsze jest możliwość jego edycji i ominięcia zabezpieczeń.
Pilsener
Moim zdaniem chyba jedyna bezpieczna i względnie "pewna" metoda to serwer uwierzytelniający, bez którego aplikacja nie ma prawa działać - jak to zrobić, aby nie można było obejść? Pierwsza myśl jest taka, że na serwerze znajduje się plik konfiguracyjny + jakaś część kodu, która jest niezbędna do poprawnego działania aplikacji - a jak to zrobić, aby nie dało się łatwo przerobić aplikacji i spreparować pliku .cfg na własnym serwerze? Nie wiem - może co jakiś czas serwer wysyła nowy klucz dostępu do pliku konfiguracyjnego? Pomysłów pewnie jest wiele - trzeba by to zrobić tak, aby "uniezależnienie" aplikacji od serwera uwierzytelniającego było maksymalnie trudne i nieopłacalne - w każdym bądź razie pomysł jets wart rozważenia, może ktoś kiedyś coś takiego wymyśli i powstaną serwery autoryzujące aplikacje PHP, których kod źródłowy będzie szyfrowany zmiennym kluczem pobieranym z tych serwerów? Nie wiem winksmiley.jpg
Szunaj85
Pgrzelka...
Cytat
możesz też zakodować coś takiego
if ($domena != 'dozwolonadomena') {
mail(twoj@mail, 'naruszenie', 'klient umiescil skrypt na innej domenie');
}
Twój pomysł jest dobry. Sam przyznam, że o czymś takim myślałem. Trzeba jednak pamiętać, że wiele serwerów ma zablokowaną funkcję "mail" i wtedy komunikatu nie otrzymasz. sadsmiley02.gif
DannyM
Cytat(Szunaj85 @ 26.05.2009, 15:32:00 ) *
Pgrzelka...
Twój pomysł jest dobry. Sam przyznam, że o czymś takim myślałem. Trzeba jednak pamiętać, że wiele serwerów ma zablokowaną funkcję "mail" i wtedy komunikatu nie otrzymasz. sadsmiley02.gif


Pomysl jest dobry ale zwraca na siebie uwage w kodzie co ulatwia wykrycie kodu, ktory za to odpowiada.
no chyba, ze

mail($a, $c, $y);

a zmienne zaszyc gdzies w kodzie choc to i tak dosc jasne i dla laika winksmiley.jpg
wNogachSpisz
Jest też narzędzie o nazwie: IonCube, niestety nie wiem na ile bezpieczne, na pewno koduje pliki źródłowe do postaci, z której nie można już wrócić do piewotnego kodu php. Nie mam konkretnej informacji na ten temat, ale chyba krakersy będą w stanie znullować tak zabezpieczony soft.

Można też umieścić cały rdzeń aplikacji na zaufanym serwerze firmowym (nigdy nie zdradzamy kodu na serwerze) i komunikować się z nim przez RPC, przeliczac po stronie serwera i zwracac wynik, baza danych może być umieszczona na takim serwerze lecz może też siedzieć u klienta, klientowi udostępnić tylko pliki szabonów i ten jak najkrótszy kod do komunikacji z serwem.
Krótko mówiąc, umieścić na firmowym serwerze tyle kodu ile się da i nie ujawniać go.Oczywiście wszystko zależy jakiego robisz appsa, w wielu przypadkach coś takiego będzie po prostu niemożliwe do wykonania.

A teraz przykład z życia:
Oprogramowanie o nazwie Kayako SupportSuite (taki system obsługi klienta)
licencja kosztuje ileś tam dolarów i nie ma praktycznie opcji uruchomienia tego oprogramowania w taki sposoób, żęby nie dało się ukryć jego pracy po znalezieniu stronki na którą padnie chociaż cień podejżenia że Kayako tam dziala,


a jeśli się da to wymagało by to ogromu pracy.
Sciagnijcie z torrentów i sprawdźcie sami smile.gif

Po znalezieniu stronki gdzie dziala nasz soft każdy chyba wie co robić, dla pewności przypomne, wysyłamy do admina strony email w którego treści wymieniamy wszystkie organy wykonawczne w europie smile.gif ten sposób nie dziala tylko na ThePirateBay.org smile.gif

Refleksja:
Czy na prawde musimy robić kod zabezpieczony za wszelką cene? czy nie możemy zrobić JavaScripta, okraszyć go licencją i zwyczajnie liczyć na uczciwość ludzką, a w razie jej braku bez ceregieli sąd i odszkodowanie? smile.gif
DannyM
Cytat(wNogachSpisz @ 6.06.2009, 12:01:01 ) *
A teraz przykład z życia:
Oprogramowanie o nazwie Kayako SupportSuite (taki system obsługi klienta)
licencja kosztuje ileś tam dolarów i nie ma praktycznie opcji uruchomienia tego oprogramowania w taki sposoób, żęby nie dało się ukryć jego pracy po znalezieniu stronki na którą padnie chociaż cień podejżenia że Kayako tam dziala,
a jeśli się da to wymagało by to ogromu pracy.


Kurcze ten fragment jest dla mnie malo zrozumiały winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.