Kod pozwoli ci się zabezpieczyć przed proxy typu Hitfaker i HTTP.
$_SERVER['SERVER_PROTOCOL'] - pokazuje protokoł przeglądarki $_SERVER['HTTP_CONNECTION'] - sam nie wiem $_SERVER['HTTP_ACCEPT_LANGUAGE'] - zwraca język danej przeglądarki $_SERVER['HTTP_ACCEPT_ENCODING']- zwraca szyfrowanie(ewentualnie)
To są te zmienne.
I teraz jak to zastosować w praktyce?
No tak! Możemy użyć prostych if'ów(zapytań).
Najpierw zamienimy zmienne globalne w lokalne i wszystko damy sobie w funkcje aby kod był bardziej przejrzysty.
function wykryj(){ $proto = $_SERVER['SERVER_PROTOCOL']; $conn = $_SERVER['HTTP_CONNECTION']; $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $accept = $_SERVER['HTTP_ACCEPT_ENCODING']; }
Teraz stworzymy jądro skryptu(ify).
No to najpierw zrobimy trudniejsze zapytanie. Zajmiemy się zmienną $_SERVER['HTTP_ACCEPT_ENCODING']
function wykryj(){ $proto = $_SERVER['SERVER_PROTOCOL']; $conn = $_SERVER['HTTP_CONNECTION']; $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $accept = $_SERVER['HTTP_ACCEPT_ENCODING']; $proxy = 0; // zmienna która będzie zwracać funkcja $aha = "gzip"; // funkcja szuka w stringu jeżeli go nie znajdzie to zwróci false if($strpos === false){ $proxy = 1; } }
To teraz dodamy zmienną $_SERVER['SERVER_PROTOCOL']. Na zwykłych przeglądarkach zwraca on HTTP/1.1 . Na proxy zwraca czasami HTTP/1.0 . Więc to już cos

function wykryj(){ $proto = $_SERVER['SERVER_PROTOCOL']; $conn = $_SERVER['HTTP_CONNECTION']; $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $accept = $_SERVER['HTTP_ACCEPT_ENCODING']; $proxy = 0; // zmienna która będzie zwracać funkcja $aha = "gzip"; // funkcja szuka w stringu jeżeli go nie znajdzie to zwróci false if($strpos === false){ $proxy = 1; } elseif($proto != "HTTP/1.1") { $proxy = 1; } }
Dobra, dodaliśmy 2 zabezpieczenia, zostały ostatnie 2. Zrobimy Connection(normalnie zwraca "Keep-Alive", na proxy albo nic nie zwróci lub "close") i LANGUAGE(Zwraca język przeglądarki).
function wykryj(){ $proto = $_SERVER['SERVER_PROTOCOL']; $conn = $_SERVER['HTTP_CONNECTION']; $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $accept = $_SERVER['HTTP_ACCEPT_ENCODING']; $proxy = 0; // zmienna która będzie zwracać funkcja $aha = "gzip"; // funkcja szuka w stringu jeżeli go nie znajdzie to zwróci false if($strpos === false){ $proxy = 1; } elseif($proto != "HTTP/1.1") { $proxy = 1; } elseif($conn == ""){ $proxy = 1; } elseif($langua == ""){ $proxy = 1; } }
I można powiedzieć że to już koniec, jeszcze dodamy return i upiększymy trochę kodzik.
function wykryj(){ $proto = $_SERVER['SERVER_PROTOCOL']; $conn = $_SERVER['HTTP_CONNECTION']; $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $accept = $_SERVER['HTTP_ACCEPT_ENCODING']; $proxy = 0; // zmienna która będzie zwracać funkcja $aha = "gzip"; // funkcja szuka w stringu jeżeli go nie znajdzie to zwróci false if($strpos === false){ $proxy = 1; } elseif($proto != "HTTP/1.1") { $proxy = 1; } elseif($conn == ""){ $proxy = 1; } elseif($langua == ""){ $proxy = 1; } return $proxy; }
Pamiętajcie aby użyć elseif a nie dawać kolejne if'y. Zwykłymi ifami dałoby rade lecz po co sobie utrudniać życie.
To zostało nam tylko użyć naszej funkcji.
function wykryj(){ $proto = $_SERVER['SERVER_PROTOCOL']; $conn = $_SERVER['HTTP_CONNECTION']; $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $accept = $_SERVER['HTTP_ACCEPT_ENCODING']; $proxy = 0; // zmienna która będzie zwracać funkcja $aha = "gzip"; // funkcja szuka w stringu jeżeli go nie znajdzie to zwróci false if($strpos === false){ $proxy = 1; } elseif($proto != "HTTP/1.1") { $proxy = 1; } elseif($conn == ""){ $proxy = 1; } elseif($langua == ""){ $proxy = 1; } //tutaj ew. można napisać co ma zrobić jak nie będzie proxy $t = $_SERVER['REMOTE_ADDR']; $cz = gethostbyaddr($_SERVER['REMOTE_ADDR']); `SERVER_PROTOCOL` , `REMOTE_ADDR` , `HOST` , `HTTP_CONNECTION`, `HTTP_ACCEPT_ENCODING`, `HTTP_ACCEPT_LANGUAGE`, `proxy` ) VALUES ( '$proto', '$t', '$cz', '$conn','$langua','$accept','$proxy' return $proxy; } $wyk = wykryj(); if($wyk == 0){ } else { }
Można też zrobić tak(sposób Pawel_W)
function wykryj(){ $proto = $_SERVER['SERVER_PROTOCOL']; $conn = $_SERVER['HTTP_CONNECTION']; $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $accept = $_SERVER['HTTP_ACCEPT_ENCODING']; $proxy = 0; // zmienna która będzie zwracać funkcja $aha = "gzip"; // funkcja szuka w stringu jeżeli go nie znajdzie to zwróci false if($strpos === false || $proto != "HTTP/1.1" || $p == "" || $s == ""){ $proxy = 1; } //tutaj ew. można napisać co ma zrobić jak nie będzie proxy $t = $_SERVER['REMOTE_ADDR']; $cz = gethostbyaddr($_SERVER['REMOTE_ADDR']); `SERVER_PROTOCOL` , `REMOTE_ADDR` , `HOST` , `HTTP_CONNECTION`, `HTTP_ACCEPT_ENCODING`, `HTTP_ACCEPT_LANGUAGE`, `proxy` ) VALUES ( '$proto', '$t', '$cz', '$conn','$langua','$accept','$proxy' return $proxy; } $wyk = wykryj(); if($wyk == 0){ } else { }
Mój system na 3 240 proxy przepuścił tylko jedno, więc to już coś

Podziękowania dla Pigola który pomógł mi w tym temacie

Zdjęcia bazy


A tutaj krótki filmik

http://www.youtube.com/watch?v=eLT1aJSyBiE
po chwili(rezultat bombardowania proxami)
http://www.youtube.com/watch?v=r-15YK5nAHw
Jestem nowy w php więc jeżeli coś jest nie tak to prosiłbym o poprawienie.
Fajnie gdyby temat został podpięty, mało osób wie jak się zabezpieczyć "porządnie" przed proxy.
Kod i tutka napisałem samemu, nie pozwalam na kopiowanie.