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

2022-08-30 16:32:03

我正在寻找一种方法,或者一种方法来检测使用任何类型的代理服务器查看我的网站的客户端。我正在使用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"

我想做类似的事情来防止代理。


答案 1

在 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!");
}

方法二:端口扫描回正常代理端口处的源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!");
     }
 }

答案 2

你无法检测到这一点,除非他们传递特殊的标头,这些标头明确地提到了它,比如X-Forwarded-For之类的东西。

据我所知,你必须使用黑名单。使用腻子端口转发,VPN或其他更复杂的方法的用户是不可访问的,因为他们的行为与普通用户完全相同。


推荐