Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] $_SERVER, proxy
kaczors
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 11.05.2009

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


Witam.
Jestem w trakcie próby stworzenia weryfikatora serwerów proxy, nie opierającego się na bazie znanych adresów ip serwerów proxy. Jak wiadomo należy bacznie prześledzić zmienne środowiskowe, które powinny nas doprowadzić do najbardziej prawdopodobnego wyniku.

Wzoruję się na takich stronach:

http://www.jockersoft.com/english/ipaddress.php
oraz
http://www.proxyserverprivacy.com/adv-free...-detector.shtml

Napotykam takie oto problemy: Na tych stronach odczytują:

Connection: keep-alive
Keep-Alive: 300

Pierwsza z informacji teoretycznie powinna się znaleźć w zmiennej 'HTTP_CONNECTION', lecz w moim skrypcie nie istnieje taka zmienna.
Czy widoczność tej zmiennej zależy od serwera na którym stoi skrypt??

Także po wejściu na te strony mam:

Proxy HTTP_X_FORWARDED Variable: (none)

Proxy HTTP_VIA Variable: (none)

Proxy HTTP_PROXY_CONNECTION: (none)

Gdzie w moim skrypcie te zmienne mają pewne wartości(dwie pierwsze)

print_r( $_SERVER );

Wynik działania powyższego kodu na moim serwerze

Array
(
[PATH] => /usr/local/bin:/usr/bin:/bin
[UNIQUE_ID] => SggzBldi3pgAAHLJkHsAAAA0
[REAL_HOST] => 193.239.80.21
[HTTP_HOST] => engineer.ovh.org
[HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
[HTTP_ACCEPT_LANGUAGE] => pl,en-us;q=0.7,en;q=0.3
[HTTP_ACCEPT_ENCODING] => gzip,deflate
[HTTP_ACCEPT_CHARSET] => ISO-8859-2,utf-8;q=0.7,*;q=0.7
[HTTP_COOKIE] => SESS47f8c6f823598c9dba1c59fb62aeb1bb=f71f56b5e2896bb7eec0132c8f3457ef
[HTTP_CACHE_CONTROL] => max-age=0
[HTTP_MAX_FORWARDS] => 10
[HTTP_VIA] => 1.1 127.0.0.1
[HTTP_X_FORWARDED_FOR] => 193.239.80.21
[HTTP_X_FORWARDED_HOST] => engineer.ovh.org
[HTTP_X_FORWARDED_SERVER] => 127.0.0.1
[SERVER_SIGNATURE] =>
[SERVER_SOFTWARE] => Apache
[SERVER_NAME] => engineer.ovh.org
[SERVER_ADDR] => 87.98.222.152
[SERVER_PORT] => 80
[REMOTE_ADDR] => 193.239.80.21
[DOCUMENT_ROOT] => /home/e/n/g/engineer/www
[SERVER_ADMIN] => postmaster@engineer.ovh.org
[SCRIPT_FILENAME] => /home/e/n/g/engineer/www/index.php
[REMOTE_PORT] => 55217
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /
[SCRIPT_NAME] => /index.php
[UID] => 105826
[PHP_SELF] => /index.php
[REQUEST_TIME] => 1242051334
[argv] => Array
(
[0] => index.php
)

[argc] => 1
)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wNogachSpisz
post
Post #2





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


No właśnie, ty o pierniku a ja...

Sprawdzanie czy user korzysta z proxy, teraz mamy jasność :P

Połącznie wygląda tak:
przeglądarka usera -> serwer proxy -> Twój skrypt

Nagłowki http wysyła do Twojego skryptu wyłącznie serwer proxy.
Może on oszukiwać na przerozmaite sposoby łącznie z emitowaniem nagłówków identycznych jak te odebrane od przeglądarki usera, więc pewna część użytkowników przejdzie bez problemu przez takie zabezpieczenie przechodzić.
Jeśli jednak nie chcesz łączyć się z zwenętrznymi serwerami w celu weryfikacji, to jest to jedyne sensowne rozwiązanie.


Jak ja bym to zrobił:

1. Skan IP w poszukiwaniu otwartego proxy
Minusem tego rozwiązania jest czas skanowania (nawet kilka minut), należy wobec tego przy pierwszy odwiedzinach wpuścić usera, w tle rozpocząć skanowanie IP i jeśli okaże się że to proxy, zablokować kolejne wywołania strony przez takiego użytkownika. To chyba najlepsze rozwiązanie 99,9% skuteczności.


2. Google
Jeśli pod wybrabym IP jest publiczne proxy, google wyplują slowo "proxy" w 3000 ekzemplarzach, ale może też zdarzyć się ze wypluje slow proxy jeśli tam proxy wcale nie ma i tym sposobem zablokujesz normalnego usera.

3. Whois:
Nie wiem gdzie we whois jest napisane że to proxy, jeśli już to nie za często, 3% skutecznosci :P


4. Jeszcze raz nagłowki
Jeśli uda Ci się zbudować skrypt rozpoznający nagłówki wysyłane przez 99% współczesnych przeglądarek internetowych (różne wersje), to takie rozwiązanie też będzie OK, 90% skuteczności.

Wszystko zależy od tego, jakie masz wymagania wobec skryptu, metod jak widzisz jest conajmniej kilka.

Coś do rozpoznawania przeglądraki od CodeIgnitera:

  1. <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2. /*
  3. | -------------------------------------------------------------------
  4. | USER AGENT TYPES
  5. | -------------------------------------------------------------------
  6. | This file contains four arrays of user agent data.  It is used by the
  7. | User Agent Class to help identify browser, platform, robot, and
  8. | mobile device data.  The array keys are used to identify the device
  9. | and the array values are used to set the actual name of the item.
  10. |
  11. */
  12.  
  13. $platforms = array (
  14.                  'windows nt 6.0'    => 'Windows Longhorn',
  15.                  'windows nt 5.2'    => 'Windows 2003',
  16.                  'windows nt 5.0'    => 'Windows 2000',
  17.                  'windows nt 5.1'    => 'Windows XP',
  18.                  'windows nt 4.0'    => 'Windows NT 4.0',
  19.                  'winnt4.0'            => 'Windows NT 4.0',
  20.                  'winnt 4.0'            => 'Windows NT',
  21.                  'winnt'                => 'Windows NT',
  22.                  'windows 98'        => 'Windows 98',
  23.                  'win98'                => 'Windows 98',
  24.                  'windows 95'        => 'Windows 95',
  25.                  'win95'                => 'Windows 95',
  26.                  'windows'            => 'Unknown Windows OS',
  27.                  'os x'                => 'Mac OS X',
  28.                  'ppc mac'            => 'Power PC Mac',
  29.                  'freebsd'            => 'FreeBSD',
  30.                  'ppc'                => 'Macintosh',
  31.                  'linux'                => 'Linux',
  32.                  'debian'            => 'Debian',
  33.                  'sunos'                => 'Sun Solaris',
  34.                  'beos'                => 'BeOS',
  35.                  'apachebench'        => 'ApacheBench',
  36.                  'aix'                => 'AIX',
  37.                  'irix'                => 'Irix',
  38.                  'osf'                => 'DEC OSF',
  39.                  'hp-ux'                => 'HP-UX',
  40.                  'netbsd'            => 'NetBSD',
  41.                  'bsdi'                => 'BSDi',
  42.                  'openbsd'            => 'OpenBSD',
  43.                  'gnu'                => 'GNU/Linux',
  44.                  'unix'                => 'Unknown Unix OS'
  45.              );
  46.  
  47.  
  48. // The order of this array should NOT be changed. Many browsers return
  49. // multiple browser types so we want to identify the sub-type first.
  50. $browsers = array(
  51.                  'Opera'                => 'Opera',
  52.                  'MSIE'                => 'Internet Explorer',
  53.                  'Internet Explorer'    => 'Internet Explorer',
  54.                  'Shiira'            => 'Shiira',
  55.                  'Firefox'            => 'Firefox',
  56.                  'Chimera'            => 'Chimera',
  57.                  'Phoenix'            => 'Phoenix',
  58.                  'Firebird'            => 'Firebird',
  59.                  'Camino'            => 'Camino',
  60.                  'Netscape'            => 'Netscape',
  61.                  'OmniWeb'            => 'OmniWeb',
  62.                  'Mozilla'            => 'Mozilla',
  63.                  'Safari'            => 'Safari',
  64.                  'Konqueror'            => 'Konqueror',
  65.                  'icab'                => 'iCab',
  66.                  'Lynx'                => 'Lynx',
  67.                  'Links'                => 'Links',
  68.                  'hotjava'            => 'HotJava',
  69.                  'amaya'                => 'Amaya',
  70.                  'IBrowse'            => 'IBrowse'
  71.              );
  72.  
  73. $mobiles = array(
  74.                  // legacy array, old values commented out
  75.                  'mobileexplorer'    => 'Mobile Explorer',
  76. //                    'openwave'            => 'Open Wave',
  77. //                    'opera mini'        => 'Opera Mini',
  78. //                    'operamini'            => 'Opera Mini',
  79. //                    'elaine'            => 'Palm',
  80.                  'palmsource'        => 'Palm',
  81. //                    'digital paths'        => 'Palm',
  82. //                    'avantgo'            => 'Avantgo',
  83. //                    'xiino'                => 'Xiino',
  84.                  'palmscape'            => 'Palmscape',
  85. //                    'nokia'                => 'Nokia',
  86. //                    'ericsson'            => 'Ericsson',
  87. //                    'blackberry'        => 'BlackBerry',
  88. //                    'motorola'            => 'Motorola'
  89.  
  90.                  // Phones and Manufacturers
  91.                  'motorola'            => "Motorola",
  92.                  'nokia'                => "Nokia",
  93.                  'palm'                => "Palm",
  94.                  'iphone'            => "Apple iPhone",
  95.                  'ipod'                => "Apple iPod Touch",
  96.                  'sony'                => "Sony Ericsson",
  97.                  'ericsson'            => "Sony Ericsson",
  98.                  'blackberry'        => "BlackBerry",
  99.                  'cocoon'            => "O2 Cocoon",
  100.                  'blazer'            => "Treo",
  101.                  'lg'                => "LG",
  102.                  'amoi'                => "Amoi",
  103.                  'xda'                => "XDA",
  104.                  'mda'                => "MDA",
  105.                  'vario'                => "Vario",
  106.                  'htc'                => "HTC",
  107.                  'samsung'            => "Samsung",
  108.                  'sharp'                => "Sharp",
  109.                  'sie-'                => "Siemens",
  110.                  'alcatel'            => "Alcatel",
  111.                  'benq'                => "BenQ",
  112.                  'ipaq'                => "HP iPaq",
  113.                  'mot-'                => "Motorola",
  114.                  'playstation portable'     => "PlayStation Portable",
  115.                  'hiptop'            => "Danger Hiptop",
  116.                  'nec-'                => "NEC",
  117.                  'panasonic'            => "Panasonic",
  118.                  'philips'            => "Philips",
  119.                  'sagem'                => "Sagem",
  120.                  'sanyo'                => "Sanyo",
  121.                  'spv'                => "SPV",
  122.                  'zte'                => "ZTE",
  123.                  'sendo'                => "Sendo",
  124.  
  125.                  // Operating Systems
  126.                  'symbian'                => "Symbian",
  127.                  'SymbianOS'                => "SymbianOS", 
  128.                  'elaine'                => "Palm",
  129.                  'palm'                    => "Palm",
  130.                  'series60'                => "Symbian S60",
  131.                  'windows ce'            => "Windows CE",
  132.  
  133.                  // Browsers
  134.                  'obigo'                    => "Obigo",
  135.                  'netfront'                => "Netfront Browser",
  136.                  'openwave'                => "Openwave Browser",
  137.                  'mobilexplorer'            => "Mobile Explorer",
  138.                  'operamini'                => "Opera Mini",
  139.                  'opera mini'            => "Opera Mini",
  140.  
  141.                  // Other
  142.                  'digital paths'            => "Digital Paths",
  143.                  'avantgo'                => "AvantGo",
  144.                  'xiino'                    => "Xiino",
  145.                  'novarra'                => "Novarra Transcoder",
  146.                  'vodafone'                => "Vodafone",
  147.                  'docomo'                => "NTT DoCoMo",
  148.                  'o2'                    => "O2",
  149.  
  150.                  // Fallback
  151.                  'mobile'                => "Generic Mobile",
  152.                  'wireless'                 => "Generic Mobile",
  153.                  'j2me'                    => "Generic Mobile",
  154.                  'midp'                    => "Generic Mobile",
  155.                  'cldc'                    => "Generic Mobile",
  156.                  'up.link'                => "Generic Mobile",
  157.                  'up.browser'            => "Generic Mobile",
  158.                  'smartphone'            => "Generic Mobile",
  159.                  'cellphone'                => "Generic Mobile"
  160.              );
  161.  
  162. // There are hundreds of bots but these are the most common.
  163. $robots = array(
  164.                  'googlebot'            => 'Googlebot',
  165.                  'msnbot'            => 'MSNBot',
  166.                  'slurp'                => 'Inktomi Slurp',
  167.                  'yahoo'                => 'Yahoo',
  168.                  'askjeeves'            => 'AskJeeves',
  169.                  'fastcrawler'        => 'FastCrawler',
  170.                  'infoseek'            => 'InfoSeek Robot 1.0',
  171.                  'lycos'                => 'Lycos'
  172.              );
  173.  
  174. /* End of file user_agents.php */
  175. /* Location: ./system/application/config/user_agents.php */
  176. ?>


Ten post edytował wNogachSpisz 12.05.2009, 08:58:58
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: 15.10.2025 - 06:02