2009-06-16 64 views
3

我在想如何检测登录到我的网站的用户是否在代理后面。我读过你可以通过可嵌入对象(Flash和Java)来检测一个人的真实IP地址。但是,我一直无法找到任何实例或来源。检测用户是否在代理后

我正在使用PHP,我已经阅读过,寻找$_SERVER['HTTP_X_FORWARDED_FOR'], $_SERVER['HTTP_CLIENT_IP']等会检测大多数代理,但到目前为止我还没有能够通过与TOR测试(也许TOR不会标记这些,但我已经读过匿名代理仍然显示HTTP_X_FORWARDED)。如果可能的话,我想尝试用java servlet来做。任何人都可以用正确的方向指出我的意思(最好用例子?)我在ha.ckers.org上看到了一些代码,但它们只显示客户端而不是服务器端。

+0

如果我可以问:为什么要检测代理用户?除了连接使用方面的一些可能的差异之外(如果你愿意的话,网络足迹),它确实无关紧要。 – benc 2009-06-27 05:56:31

回答

5

TOR不提供任何服务器头,如X_FORWARDED_FOR,所以你最好的选择是使用所有已知退出节点的列表。列表可以在https://torstat.xenobite.eu/找到。

对于其他代理,你可以看看服务器头。可能的利益服务器头包括:

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 

在PHP中,你可以在$_SERVER[] superglobal这些字段的值。

1

如果这是一个选项,你可以尝试使用https。用户IP然后应该对您可见。但是不知道关于SSL代理背后的办公用户。

1

Java Applets或Flash都不应该泄漏客户端IP。我知道旧版本的Flash有一个安全漏洞,使它成为可能。最有可能的是现在已经被修补了。

我从来没有使用TOR,但是从我读的内容看来,它似乎是作为一种VPN实现的,因此浏览器根本就不会意识到它。

为什么你需要知道用户是否在代理之后?

+0

哦,我已经注意到Flash的问题在Flash 9.0之后发生了变化,所以你是对的。我想让人们不会在我制作的游戏上使用代理,因此当我禁止垃圾邮件发送者时,他们无法使用代理创建新帐户。我知道这不是傻瓜证明,但我想让它更难一点。 – ravun 2009-06-16 13:04:24

2

通过查找以下标题字段,您应该使用一些proxys。

VIA 
FORWARDED 
USERAGENT_VIA 
X_FORWARDED_FOR 
PROXY_CONNECTION 
XPROXY_CONNECTION 
HTTP_PC_REMOTE_ADDR 
HTTP_CLIENT_IP 

至于阻塞TOR你最好用iptables阻止TOR出口节点。

如果你真的必须确定你可以尝试一些“半恶意”的东西,比如在你的页面中嵌入一些flash或者java,这会将你的真实客户端ip发回给你。但是,这只限于有限的范围,因为如果他在例如,你可能只获得本地IP地址。一个局域网你得到像192.168.1.x

+0

我听说过这些标题,但试图从PHP中的$ _SERVER超全局访问它们似乎没有帮助。我还没有看到超全局$ _SERVER中的这些索引,但我只使用了TOR,所以也许这是不同的。据我所知,TOR是一个匿名代理,仍然应该标记X_FORWARDED_FOR,但在测试中没有任何内容出现。 – ravun 2009-06-16 13:06:01

+1

太好了。与我的标题复制HTTP_前缀完全相同的答案获得接受我的得到一个投票? – jitter 2009-06-16 17:07:38