确定用户是否使用代理

20

大家好,我正在制作一款游戏,并希望能够判断用户是否使用代理。如果是的话,就在他们的账户上打上标记。我已经实现了打标记的功能,但我不确定如何判断用户是否在使用代理。我看到可以使用头文件,但我不确定要查找哪些头文件,以及如何检查用户是否“具有”头文件(除了正常的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个回答

7
在谷歌上搜索“php检测http代理”后,我找到了以下内容:

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

"...还有不少其他有趣的结果。"
"编辑:"
"据我所知,无论是绝对确定还是安全地检测HTTP代理的方法都不存在:".
  • 匿名服务不会添加正确的请求头 - 事实上,它们会删除其中一些。您需要保留最受欢迎的匿名服务及其IP地址块的列表,并以此方式检测它们。网上有一些列表可能可以使用,但它们远非完整 - 特别是考虑到大多数大型机构(ISP、公司、大学等)为其用户提供代理服务器。有些甚至要求他们的用户使用它们。

  • 许多HTTP代理被配置成仅转发请求而不更改标头。

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

  • 任何SSH服务器都可以被其用户用作SOCKS代理,这实际上是不可检测的,因为它不是真正的HTTP代理。

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

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


这更多是另一种检查用户是否作弊的方式。我们已经进行了一些检查,但在我游戏中作弊的唯一方法确实是拥有由同一人控制的两个或更多帐户在同一个“组/公司/联盟”中。除此之外,没有真正任何作弊的理由。因此,通过检查他们是否使用代理,基本上是一种将他们逼入困境并问他们为什么会作弊的方式。这是让他们证明自己的另一件事。在上面查找我找到的最佳脚本以及它为什么不能为我工作的修改。 - jefffan24
1
我不是PHP程序员,但除非我弄错了,你的脚本试图在远程主机的80端口打开连接。如果该端口被防火墙阻止(家庭用户的常态),并且数据包被丢弃而不是拒绝,则您的脚本将不得不等待连接超时。我会彻底删除该检查 - 它实际上并不有用,因为许多代理不使用80端口,它还会捕捉到在家中拥有开放式Web服务器的家庭用户。 - thkala
似乎这是大多数代理服务器所捕获的东西,从而允许我进入。当我删除那行时,vtunnel.com和hidemyass.com正常通过,但是当我加入那行时,它会阻止它们。我认为这与大多数代理服务器不打开端口80有关。 - jefffan24
是的,也许是这样,但我在前几个标头中并没有真正捕捉到任何内容(不是来自大名鼎鼎的代理)。我不会阻止任何人访问该网站,这只是为了在我们感觉他们作弊时提供对抗他们的武器。 - jefffan24
另外,倒数第二行(“in_array($ _SERVER ['REMOTE_PORT'],array(8080,80,6588,8000,3128,553,554))”)实际上不起作用;远程端口将是一个高随机端口,而不是80/8080/8000等(这些是代理的监听端口)。最后一行(@ fsockopen)也不太好;它不仅不友好,而且并不能证明任何事情(只是客户端碰巧运行Web服务器),而且它是引入延迟的原因。 - Mark Nottingham
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接