Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [TUT]Jak zabezpieczyć formularz przed proxy?, Zabezpieczamy nasz kodzik :)
jackraymund
post
Post #1





Grupa: Zarejestrowani
Postów: 217
Pomógł: 21
Dołączył: 10.06.2011
Skąd: Głogów

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


Pewnie dużo osób się zastanawiało jak zabezpieczyć się przed proxy. Dzisiaj jakoś mnie natchnienie wzięło i przeszukałem zmienną globalną $_SERVER i znalazłem kilka wpisów które różnią się od normalnego wejścia, a wejścia z proxy.
Kod pozwoli ci się zabezpieczyć przed proxy typu Hitfaker i HTTP.
  1. $_SERVER['SERVER_PROTOCOL'] - pokazuje protokoł przeglądarki
  2. $_SERVER['HTTP_CONNECTION'] - sam nie wiem
  3. $_SERVER['HTTP_ACCEPT_LANGUAGE'] - zwraca język danej przeglądarki
  4. $_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.
  1. function wykryj(){
  2. $proto = $_SERVER['SERVER_PROTOCOL'];
  3. $conn = $_SERVER['HTTP_CONNECTION'];
  4. $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  5. $accept = $_SERVER['HTTP_ACCEPT_ENCODING'];
  6. }

Teraz stworzymy jądro skryptu(ify).
No to najpierw zrobimy trudniejsze zapytanie. Zajmiemy się zmienną $_SERVER['HTTP_ACCEPT_ENCODING']
  1. function wykryj(){
  2. $proto = $_SERVER['SERVER_PROTOCOL'];
  3. $conn = $_SERVER['HTTP_CONNECTION'];
  4. $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  5. $accept = $_SERVER['HTTP_ACCEPT_ENCODING'];
  6. $proxy = 0;
  7. // zmienna która będzie zwracać funkcja
  8. $aha = "gzip";
  9. $strpos = strpos($accept,$aha);
  10. // funkcja szuka w stringu jeżeli go nie znajdzie to zwróci false
  11. if($strpos === false){
  12. $proxy = 1;
  13. }
  14. }

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 (IMG:style_emoticons/default/smile.gif)
  1. function wykryj(){
  2. $proto = $_SERVER['SERVER_PROTOCOL'];
  3. $conn = $_SERVER['HTTP_CONNECTION'];
  4. $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  5. $accept = $_SERVER['HTTP_ACCEPT_ENCODING'];
  6. $proxy = 0;
  7. // zmienna która będzie zwracać funkcja
  8. $aha = "gzip";
  9. $strpos = strpos($accept,$aha);
  10. // funkcja szuka w stringu jeżeli go nie znajdzie to zwróci false
  11. if($strpos === false){
  12. $proxy = 1;
  13. }
  14. elseif($proto != "HTTP/1.1")
  15. {
  16. $proxy = 1;
  17. }
  18. }

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).
  1. function wykryj(){
  2. $proto = $_SERVER['SERVER_PROTOCOL'];
  3. $conn = $_SERVER['HTTP_CONNECTION'];
  4. $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  5. $accept = $_SERVER['HTTP_ACCEPT_ENCODING'];
  6. $proxy = 0;
  7. // zmienna która będzie zwracać funkcja
  8. $aha = "gzip";
  9. $strpos = strpos($accept,$aha);
  10. // funkcja szuka w stringu jeżeli go nie znajdzie to zwróci false
  11. if($strpos === false){
  12. $proxy = 1;
  13. }
  14. elseif($proto != "HTTP/1.1")
  15. {
  16. $proxy = 1;
  17. }
  18. elseif($conn == ""){
  19. $proxy = 1;
  20. }
  21. elseif($langua == ""){
  22. $proxy = 1;
  23. }
  24. }

I można powiedzieć że to już koniec, jeszcze dodamy return i upiększymy trochę kodzik.
  1. function wykryj(){
  2. $proto = $_SERVER['SERVER_PROTOCOL'];
  3. $conn = $_SERVER['HTTP_CONNECTION'];
  4. $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  5. $accept = $_SERVER['HTTP_ACCEPT_ENCODING'];
  6. $proxy = 0;
  7. // zmienna która będzie zwracać funkcja
  8. $aha = "gzip";
  9. $strpos = strpos($accept,$aha);
  10. // funkcja szuka w stringu jeżeli go nie znajdzie to zwróci false
  11. if($strpos === false){
  12. $proxy = 1;
  13. }
  14. elseif($proto != "HTTP/1.1")
  15. {
  16. $proxy = 1;
  17. }
  18. elseif($conn == ""){
  19. $proxy = 1;
  20. }
  21. elseif($langua == ""){
  22. $proxy = 1;
  23. }
  24. return $proxy;
  25. }

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.
  1. function wykryj(){
  2. $proto = $_SERVER['SERVER_PROTOCOL'];
  3. $conn = $_SERVER['HTTP_CONNECTION'];
  4. $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  5. $accept = $_SERVER['HTTP_ACCEPT_ENCODING'];
  6. $proxy = 0;
  7. // zmienna która będzie zwracać funkcja
  8. $aha = "gzip";
  9. $strpos = strpos($accept,$aha);
  10. // funkcja szuka w stringu jeżeli go nie znajdzie to zwróci false
  11. if($strpos === false){
  12. $proxy = 1;
  13. }
  14. elseif($proto != "HTTP/1.1")
  15. {
  16. $proxy = 1;
  17. }
  18. elseif($conn == ""){
  19. $proxy = 1;
  20. }
  21. elseif($langua == ""){
  22. $proxy = 1;
  23. }
  24. //tutaj ew. można napisać co ma zrobić jak nie będzie proxy
  25. $t = $_SERVER['REMOTE_ADDR'];
  26. $cz = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  27. $temp = mysql_query("INSERT INTO `lnazwa bazy`.`nazwa tabeli` (
  28. `SERVER_PROTOCOL` ,
  29. `REMOTE_ADDR` ,
  30. `HOST` ,
  31. `HTTP_CONNECTION`,
  32. `HTTP_ACCEPT_ENCODING`,
  33. `HTTP_ACCEPT_LANGUAGE`,
  34. `proxy`
  35. )
  36. VALUES (
  37. '$proto', '$t', '$cz', '$conn','$langua','$accept','$proxy'
  38. );") or die(mysql_error());
  39.  
  40. return $proxy;
  41. }
  42.  
  43.  
  44.  
  45. $wyk = wykryj();
  46. if($wyk == 0){
  47. echo "Nie wykryto proxy";
  48. }
  49. else
  50. {
  51. echo "WYKRYTO PROXY";
  52. }
  53.  

Można też zrobić tak(sposób Pawel_W)
  1. function wykryj(){
  2. $proto = $_SERVER['SERVER_PROTOCOL'];
  3. $conn = $_SERVER['HTTP_CONNECTION'];
  4. $langua = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  5. $accept = $_SERVER['HTTP_ACCEPT_ENCODING'];
  6. $proxy = 0;
  7. // zmienna która będzie zwracać funkcja
  8. $aha = "gzip";
  9. $strpos = strpos($accept,$aha);
  10. // funkcja szuka w stringu jeżeli go nie znajdzie to zwróci false
  11. if($strpos === false || $proto != "HTTP/1.1" || $p == "" || $s == ""){
  12. $proxy = 1;
  13. }
  14. //tutaj ew. można napisać co ma zrobić jak nie będzie proxy
  15. $t = $_SERVER['REMOTE_ADDR'];
  16. $cz = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  17. $temp = mysql_query("INSERT INTO `lnazwa bazy`.`nazwa tabeli` (
  18. `SERVER_PROTOCOL` ,
  19. `REMOTE_ADDR` ,
  20. `HOST` ,
  21. `HTTP_CONNECTION`,
  22. `HTTP_ACCEPT_ENCODING`,
  23. `HTTP_ACCEPT_LANGUAGE`,
  24. `proxy`
  25. )
  26. VALUES (
  27. '$proto', '$t', '$cz', '$conn','$langua','$accept','$proxy'
  28. );") or die(mysql_error());
  29.  
  30. return $proxy;
  31. }
  32.  
  33.  
  34.  
  35. $wyk = wykryj();
  36. if($wyk == 0){
  37. echo "Nie wykryto proxy";
  38. }
  39. else
  40. {
  41. echo "WYKRYTO PROXY";
  42. }
  43.  

Mój system na 3 240 proxy przepuścił tylko jedno, więc to już coś (IMG:style_emoticons/default/smile.gif)
Podziękowania dla Pigola który pomógł mi w tym temacie (IMG:style_emoticons/default/wink.gif) Temat: Szukanie w stringu danego tekstu
Zdjęcia bazy
(IMG:http://iv.pl/images/13259010426311640687.jpg)
(IMG:http://iv.pl/images/48001239593962469983.jpg)
A tutaj krótki filmik (IMG:style_emoticons/default/smile.gif)
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.

Ten post edytował jackraymund 4.07.2011, 11:27:43
Go to the top of the page
+Quote Post

Posty w temacie


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: 17.10.2025 - 07:48