确定用户是否正在使用代理

时间:2010-12-24 16:40:35

标签: php proxy http-headers

您好我正在制作游戏,我希望能够判断用户是否正在使用代理。如果它们比它基本上在他们的帐户上放置一个标志。我可以让它做旗帜,但我不确定如何判断用户是否正在使用代理。我已经看到你可以使用标题,但我不确定要查找哪些以及如何检查用户是否“拥有”标题(除了正常的http_referrer以及什么不是)。

非常感谢任何帮助。

修改

if ( $_SERVER['HTTP_X_FORWARDED_FOR']
|| $_SERVER['HTTP_X_FORWARDED']
|| $_SERVER['HTTP_FORWARDED_FOR']
|| $_SERVER['HTTP_CLIENT_IP']
|| $_SERVER['HTTP_VIA']
|| in_array($_SERVER['REMOTE_PORT'], array(8080,80,6588,8000,3128,553,554))
|| @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 30))
{
     exit('Proxy detected');
}

所以这段代码大部分都有效,当用户是代理时,它会快速退出。但是当它们不是它需要永远加载(大约10秒)。反正有没有使用这个脚本,但让它更快地工作?

编辑2

将fsockopen的超时时间从30更改为1,它的工作速度更快,并且仍在工作。感谢大家的建议:)

1 个答案:

答案 0 :(得分:7)

在Google搜索php detect http proxies后,我想出了以下内容:

http://forums.digitalpoint.com/showthread.php?t=58964

http://forums.digitalpoint.com/showthread.php?t=365467

http://www.roscripts.com/PHP_Proxy_Detector-75.html

......还有很多其他有趣的点击。

编辑:

AFAIK无法绝对确定地或安全地检测HTTP代理:

  • Anonymizer服务不会在其请求中添加正确的标头 - 事实上他们会删除其中的一些标头。您需要保留最流行的匿名者服务及其IP地址块的列表,并以这种方式检测它们。您可以使用一些在线列表,但它们远非完整 - 特别是如果您认为大多数大型机构(ISP,公司,大学等)为其用户提供代理服务器。有些甚至要求用户使用它们。

  • 配置了许多HTTP代理,以便他们只需转发请求而无需更改标头。

  • VPN安装与HTTP代理具有相同的效果 - 即允许HTTP请求来自与Web浏览器所在计算机不同的IP - 而不是一个。

  • 任何SSH服务器都可以被其用户用作SOCKS代理,由于它不是真正的HTTP代理,因此无法检测到。

  • 有许多合法的HTTP代理无法公开访问。例如,有一些HTTP代理产品安装在家庭网络中,并为整个网络提供家长控制和可疑内容(色情,网络钓鱼站点等)。

您看到哪种滥用行为,检测HTTP代理可能有用?