通过PHP检测具有代理服务器的客户端

Mic*_*ICE 24 php proxy

我正在寻找一种方法,或使用任何类型的代理服务器查看我的网站来检测客户端的方法.我正在使用PHP/Apache ......最好的方法是什么?需要检测任何代理服务器,而不是特别是其中一个.

编辑

我对匿名代理更感兴趣...因为通过寻找可以很容易地检测到正常的代理HTTP_X_FORWARDED_FOR.

另一个编辑

试试这个:

1)转到http://kproxy.com(或任何其他免费匿名代理网站)

2)访问:http://www.worldofwarcraft.com

3)他们能够以某种方式阻止,因为页面错误输出"加载样式表时出错:加载XSLT样式表时出现网络错误:http://kproxy.com/new-hp/layout/layout.xsl "

我想做类似的事情以防止代理.

小智 23

在PHP中使用以下2个解决方案.//方法1 =快速但不能与匿名代理一起使用

    $proxy_headers = array(
        'HTTP_VIA',
        'HTTP_X_FORWARDED_FOR',
        'HTTP_FORWARDED_FOR',
        'HTTP_X_FORWARDED',
        'HTTP_FORWARDED',
        'HTTP_CLIENT_IP',
        'HTTP_FORWARDED_FOR_IP',
        'VIA',
        'X_FORWARDED_FOR',
        'FORWARDED_FOR',
        'X_FORWARDED',
        'FORWARDED',
        'CLIENT_IP',
        'FORWARDED_FOR_IP',
        'HTTP_PROXY_CONNECTION'
    );
    foreach($proxy_headers as $x){
        if (isset($_SERVER[$x])) die("You are using a proxy!");
    }
Run Code Online (Sandbox Code Playgroud)

//方法2 = portscan返回到使用的普通代理端口的原始IP.

    $ports = array(8080,80,81,1080,6588,8000,3128,553,554,4480);
    foreach($ports as $port) {
         if (@fsockopen($_SERVER['REMOTE_ADDR'], $port, $errno, $errstr, 30)) {
              die("You are using a proxy!");
         }
     }
Run Code Online (Sandbox Code Playgroud)

  • 我不鼓励使用第二种方法 - 它通常会返回误报.在使用使用此方法的第三方代理检测脚本时,我们在网站上遇到了此问题. (9认同)
  • 第二种方法,不仅需要花费大量时间而且无法在高流量的网站上实施,而且还会为一些访问者提供反病毒警报! (4认同)

Tom*_*nto 17

你无法检测到它,除非它们传递特殊的标题,明确地提到它像X-Forwarded-For或其他东西.

据我所知,你必须使用黑名单.使用putty portforwarding,VPN或其他更复杂方法的用户无法检测到,因为他们的行为与普通用户完全相同.


Kor*_*nel 8

Metasploit使用许多不同的技术来强制客户端系统进行直接连接(Flash,Java,QuickTime,MS Office,自定义DNS服务器中的漏洞/错误).

或者,如果您无法让客户端的浏览器启动metasploit,您可以尝试查找开放代理(端口扫描)和已知的Tor退出节点.

但请不要认为代理是邪恶的,需要被阻止 - 有很多合法的代理,有些用户必须使用它们.

如果您遇到垃圾邮件或其他滥用流量的问题,那么阻止代理将无济于事.您应该寻找解决问题核心(垃圾邮件过滤器,IDS)的特定解决方案,而不是假设匿名=有罪.