【问题标题】:determine if user is using proxy确定用户是否正在使用代理
【发布时间】:2011-05-30 11:11:07
【问题描述】:

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

【问题讨论】:

    标签: php proxy http-headers


    【解决方案1】:

    在 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 代理:

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

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

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

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

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

    您看到什么样的滥用行为,检测 HTTP 代理在哪些方面可能有用?

    【讨论】:

    • 它更像是另一种检查用户是否作弊的方法。我们进行了一些检查,但实际上在我的游戏中作弊的唯一方法是在同一个“组/公司/联盟”中拥有两个或多个由一个人控制的帐户。除此之外,没有任何欺骗的理由。因此,通过检查他们是否使用代理,这基本上是一种支持他们并询问他们为什么作弊的方法。还有一些事情要他们证明。在上面查看我找到的最佳脚本的编辑以及为什么它不适合我。
    • 好吧,我刚刚更改了上面脚本的超时时间,它就起作用了。该脚本似乎正在运行,它阻止了 vtunnel.com 和 hidemyass.com
    • 我不是 PHP 程序员,但除非我弄错了,否则您的脚本会尝试在远程主机的 80 端口打开连接。如果该端口被防火墙阻止(家庭用户的标准)并且数据包被丢弃而不是被拒绝,您的脚本将不得不等到连接超时。我会直接删除该检查 - 它并不是真正有用,因为许多代理都不使用端口 80,而且它还会捕获在家中拥有开放网络服务器的家庭用户。
    • 这似乎是实际上捕获大多数代理并允许自己进入的事情。当我将这条线路取出时,vtunnel.com 和 hidemyass.com 正常通过,但我把这条线路放入并阻塞他们。我认为这与大多数代理不打开端口 80 或其他东西有关。
    • 实际上,我相信您的代码可以捕获具有 open 端口 80 的任何人。我认为它在广泛使用时不会非常可靠,因为它会捕获任何家庭用户与网络服务器。无论如何它都无法捕获 SOCKS 代理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多