您好我正在制作游戏,我希望能够判断用户是否正在使用代理。如果它们比它基本上在他们的帐户上放置一个标志。我可以让它做旗帜,但我不确定如何判断用户是否正在使用代理。我已经看到你可以使用标题,但我不确定要查找哪些以及如何检查用户是否“拥有”标题(除了正常的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,它的工作速度更快,并且仍在工作。感谢大家的建议:)
答案 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代理可能有用?