![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 450 Pomógł: 84 Dołączył: 27.11.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witam, od jakiegoś czasu zacząłem stosować AJAX'a w swoich projektach.
Chciałbym zabezpieczyć plik PHP w ten sposób, aby zwracał dane tylko dla mojego skryptu, a po wejściu do tego pliku z zewnątrz (np: http://snifferwebpage.awardspace.biz/data.php) zwracał błąd. Napisałem małe zabezpieczenie, ale chciałbym, żeby ktoś z Was je przetestował ![]() BTW. sam próbowałem je ominąć, przy wykorzystaniu cURL'a na innym serwerze, ale się nie udało. Link: http://snifferwebpage.awardspace.biz/ Pozdrawiam, sniff ![]() Ten post edytował erix 6.06.2009, 17:19:33
Powód edycji: [erix] chyba do ocen?
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
tzn. co jest zabezpieczone?? - a jeśli tak miało być to gratuluję
![]() ![]() ![]() ![]() i napisz co tam miało sie wyświetlić ;p ![]() -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 450 Pomógł: 84 Dołączył: 27.11.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Jak widzisz po wciśnięciu przycisku "pobierz dane1" lub "pobierz dane2", ajax wysyła żądanie do pliku data.php o zwrot danych, w tym przypadku dane1 = 'to są dane 1', dane2 = 'to są dane 2'
![]() Ten skrypt ma za zadanie blokować wyświetlenie tych danych przez inne skrypty napisane przez osoby z zewnątrz. BTW. Jak to mówią, "Nie chwal dnia przed zachodem słońca" ![]() Ten post edytował sniffer32 6.06.2009, 19:25:22 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Z tego co widzialem za pomoca firebug'a i livehttpheaders to zmieniajac naglowki moze dalbym rade cos zdzialac ale najpierw musialbym pokombinowac z curlem by zobaczyc jak skrypt sie zachowuje jak bede mial troche czasu to cos pokombinuje
![]() -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 192 Pomógł: 13 Dołączył: 16.11.2007 Skąd: Żory Ostrzeżenie: (10%) ![]() ![]() |
Ostatnio też myślałem, o bezpieczeństwie takich skryptów, a tu taki temacik
![]() -------------------- "Źle czynisz, jeśli chwalisz, gorzej, jeśli ganisz rzecz, której dobrze nie znasz." - Leonardo Da Vinci
30.01.2009 - Mój 100 post. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 450 Pomógł: 84 Dołączył: 27.11.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ostatnio też myślałem, o bezpieczeństwie takich skryptów, a tu taki temacik ![]() Błąd w skrypcie ![]() ![]() |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
hehe - masz tam jakieś zabezpieczenie przed floodowaniem czy tylko skrypt nie wyrobił przy pętli 100?? - co drugie średnio 50% wyskoczyły błędy
![]() ![]() ![]() ![]() w sumie to mógłbyś pobrać przez takie pseudo zabezpieczenie dopiero główniejszy skrypt co tym by się zajmował jakiś trudniejszy - no hoć jak się nagłówki sprawdzi to pod wszystko da się podszyć - ps. do czego jest to xmlhttp.setRequestHeader("Connection", "close"); ![]() Connection: keep-alive Keep-Alive: 300 w każdym bądź razie jeśli logowałęś ilość zapytań z jednego ip to weisz że to nie zabezpieczenie dla kogoś kto coś trochu pisze - ale lepszy rydz jak nic ![]() ![]() ale przyznaję, że dosyć ciekawy pomysł na zabezpieczenie ![]() ![]() oki - jest to przydługawe bo mi się teraz myśleć nie chciało to tylko funkcje kopiowałem i modyfikowałem ale jeśli miałbyś nie wierzyć [wiem - brzydki kod ale co chcesz od kogoś co jest na fazie - skopiowałem tylko fragment z kodu co po pijanemu analizowałem serwisz podbij ![]() Kod <?php // strona function strona($url){ $ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); $headers = array( 'Keep-Alive: 300', 'Accept-Language: pl,en-us;q=0.7,en;q=0.3', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' ); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008121300 SUSE/3.0.5-0.1 Firefox/3.0.5'); curl_setopt($ch, CURLOPT_HEADER, 0); // gzip curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); // deflate curl_setopt($ch, CURLOPT_ENCODING, 'deflate'); // gzip, deflate curl_setopt($ch, CURLOPT_ENCODING, ''); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt'); $tresc=curl_exec($ch); if(curl_errno($ch)){echo 'Błąd #'.curl_errno($ch).': '.curl_error($ch);} curl_close($ch); return $tresc; unset($tresc); }; // reqID function reqID($url){ $ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); $headers = array( 'Host: snifferwebpage.awardspace.biz', 'Keep-Alive: 300', 'Accept-Language: pl,en-us;q=0.7,en;q=0.3', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'POST /data.php HTTP/1.1', 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Content-Type: application/x-www-form-urlencoded', 'Content-Length: 9', 'Keep-Alive: 300', 'Cache-Control: no-cache', 'Pragma: no-cache', 'Connection: keep-alive' ); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008121300 SUSE/3.0.5-0.1 Firefox/3.0.5'); curl_setopt($ch, CURLOPT_POST, 1);//przesylamy metodą post curl_setopt($ch, CURLOPT_POSTFIELDS, 'reqID=get'); //dane do wyslania curl_setopt($ch, CURLOPT_REFERER, 'http://snifferwebpage.awardspace.biz/'); curl_setopt($ch, CURLOPT_FORBID_REUSE, true); curl_setopt($ch, CURLOPT_HEADER, 0); // gzip curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); // deflate curl_setopt($ch, CURLOPT_ENCODING, 'deflate'); // gzip, deflate curl_setopt($ch, CURLOPT_ENCODING, ''); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt'); $tresc=curl_exec($ch); if(curl_errno($ch)){echo 'Błąd #'.curl_errno($ch).': '.curl_error($ch);} curl_close($ch); return $tresc; unset($tresc); }; // dane function dane($ktore,$url){ $ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); $headers = array( 'Host: snifferwebpage.awardspace.biz', 'Keep-Alive: 300', 'Accept-Language: pl,en-us;q=0.7,en;q=0.3', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'POST /data.php HTTP/1.1', 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Content-Type: application/x-www-form-urlencoded', 'Keep-Alive: 300', 'Cache-Control: no-cache', 'Pragma: no-cache', 'Connection: keep-alive', 'Content-Length: 44' ); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008121300 SUSE/3.0.5-0.1 Firefox/3.0.5'); curl_setopt($ch, CURLOPT_POST, 1);//przesylamy metodą post curl_setopt($ch, CURLOPT_POSTFIELDS, 'dane='.$ktore.'&sess='.reqID($url)); //dane do wyslania curl_setopt($ch, CURLOPT_REFERER, 'http://snifferwebpage.awardspace.biz/'); curl_setopt($ch, CURLOPT_HEADER, 0); // gzip curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); // deflate curl_setopt($ch, CURLOPT_ENCODING, 'deflate'); // gzip, deflate curl_setopt($ch, CURLOPT_ENCODING, ''); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt'); $tresc=curl_exec($ch); if(curl_errno($ch)){echo 'Błąd #'.curl_errno($ch).': '.curl_error($ch);} curl_close($ch); return $tresc; unset($tresc); }; strona('http://snifferwebpage.awardspace.biz/'); // echo '<pre>'.reqID('http://snifferwebpage.awardspace.biz/data.php').'</pre>'; for ($i=1;$i<7;++$i){$ktore=($i%2)+1; echo $i.' : '.dane($ktore,'http://snifferwebpage.awardspace.biz/data.php').'<br/>';} ?> ps. co niektórzy boty piszą też w js jako userscript i parametry do serwera swojego przekazują - a więc to co na stronie wtedy jest jak na talerzu podane ![]() Ten post edytował zegarek84 7.06.2009, 22:02:41 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]() ![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 450 Pomógł: 84 Dołączył: 27.11.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cytat hehe - masz tam jakieś zabezpieczenie przed floodowaniem czy tylko skrypt nie wyrobił przy pętli 100?? - co drugie średnio 50% wyskoczyły błędy ![]() ![]() Ten serwer jest darmowy, a darmowy znaczy wolny jak.. ![]() Cytat oki - jest to przydługawe bo mi się teraz myśleć nie chciało to tylko funkcje kopiowałem i modyfikowałem ale jeśli miałbyś nie wierzyć [wiem - brzydki kod ale co chcesz od kogoś co jest na fazie - skopiowałem tylko fragment z kodu co po pijanemu analizowałem serwisz podbij ![]() Twój kod w porównaniu do mojego jest wyjątkowo przejrzysty i zrozumiały ![]() A wracając do sprawy, skopiowałem twój kod, wrzuciłem na inny serwer wspierający cURL, lecz po odpaleniu uzyskałem taki efekt : Kod 1 : Błąd 403 ! Dostęp zabroniony ! 2 : Błąd 403 ! Dostęp zabroniony ! 3 : Błąd 403 ! Dostęp zabroniony ! 4 : Błąd 403 ! Dostęp zabroniony ! 5 : Błąd 403 ! Dostęp zabroniony ! 6 : Błąd 403 ! Dostęp zabroniony ! Mógłbyś mi wytłumaczyć co jest nie tak? ![]() ![]() BTW. Pracuję już nad nowym zabezpieczeniem, bo moja strona, która ma za jakieś 2 miesiące powstać musi przetrwać nawet atak nuklearny ![]() Ten post edytował sniffer32 8.06.2009, 19:02:45 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
a dałeś w katalogu uprawnienia do zapisu skryptom?? - na localhoście to hula bez problemu
![]() i przecież chyba sprawdzasz też cookies?? i nie da się tego w pełni zabezpieczyć (tzn możesz dorzucić logowanie ale logowanie akurat tutaj do skryptu jest chyba odrazu po wejściu na stronę?? - to cookies?? - przynajmniej odrazu tą drogą szłem)... można jeszcze na kilka sposobów jedynie utrudnić algorytm tej sesji czy jak to jest - np. sam pomysl z długością ciągu jest niezły - ale skoro już jest ten mechanizm to dlaczego stała długość ciągu?? - czy sesja nie może mieć różnej długości?? - akurat ta moim zdaniem może.... Cytat A i czy jest jakiś sposób, żeby pobieranie naszego "sessid" nie kończyło się na wysłaniu do serwera metodą POST reqID=get ? taki może trochę głupi pomysł ale można by obmysleć jakiś algorytm matematyczny przeliczający sesję z cookies do jakiejś cyfry matematycznej i zamiast tego reqID=get dać reqID=[fragment cookies] - dzięki czemu każda nowo otwarta strona miała by inny request - ale to wiadomo, ze jesli kod js bedzie czytelny i oczywisty to i to zabezpieczenie będzie łatwo obejść.... to co chcesz wyświetlić nie da się ukryć po prostu przed światem - co innego z bezpieczeństwem że ktoś ci psikusa zrobi - ale ukraść dane zawsze może ktoś co trochu wie ![]() -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 450 Pomógł: 84 Dołączył: 27.11.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
W 1 wersji było coś takiego, że dla reqID, generowało 3 zmienne, ich suma nie mogła przekroczyć sumy liczb odpowiedników znaków unicode wylosowanego ciągu znaków, niestety nie mam już tego skryptu, ale nie chcę mi się już go na nowo pisać
![]() Stwierdziłem, że jest to w sumie bezsensowne rozwiązanie można to zrobić w php przy użyciu chr(), ord() i odwołać sie cURL'em jak to wcześniej zrobiłeś. Mój nowy pomysł to: 1. Zamiast: sess = [hash], będzie: [losowy ciag znakow zakodowany w md5] = [hash]. 2. Losowy identyfikator dla diva lub pola input, w którym zapisywana jest aktualna sesja. 3. Sesja wywoływana co ustalony okres czasu, przez setInterval. Co o tym myślisz ? ![]() Ten post edytował sniffer32 8.06.2009, 18:38:04 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
wszystko ok i już trudniej - ale jak już napisałem gożej jak ktoś załapie co z czego się bierze bo jednak dane początkowe są na stronie - tyle tylko że taki gościu jak już pisałem nie zhakuje innych kont a jedynie się zaloguje i na inny serwis walnie wiadomości automatycznie - jedyne co możesz zrobić to spróbować wymyślić jak najtrudniejszy algorytm (co nie zmieni faktu, że i tak dane bez js będzie się dało pobrać) - jednak też nad sposobem za bardzo nie myśl bo czasem tak można zakrecić algorytm że nie zauważy sie iż dużo krótszą drogą można go obejść...
no i jak pisałem kod js końcowy niech już będzie trochu sieczką i nie oczywiste nazwy zmiennych - ale to kod końcowy - jednak czytelny też sobie zostaw w archiwum ![]() -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 20.06.2025 - 01:37 |