检测用户是否使用代理服务器

5
我知道这个问题已经被问了好几次,但我就是找不到解决办法!我拥有一个约会网站,并且遇到了用户通过代理(我认为)注册并发送垃圾邮件到我的用户并创建虚假账户的问题。
如何检测用户是否使用像Vtunnel、Hidemyass、TOR等代理?我知道没有绝对的方法,但像pof.com(大量的鱼)这样的网站拥有出色的代理检测功能。
我只需要从某个地方开始...即使我只能检测出最流行的代理网站。

检查 DNS 阻止列表。 - Niels Keurentjes
为什么不在您的网站上添加一个视觉/音频CAPTCHA呢?这会使得那些想要使用自动化方法注册的垃圾邮件发送者感到困难重重。 - halfer
我使用的电子邮件验证功能很好,但是通过使用Google Analytics,我发现有很多来自尼日利亚、塞内加尔等地的访问量,而且99.9%的时间他们使用的是盗用的图片。现在,我只允许来自特定国家的用户注册...这就是为什么我需要检测他们是否使用代理的原因。 - hdlmsa
你仍然没有明确表示你是否确定你的注册不是自动化的。如果你不确定,那么 CAPTCHA 可能会有所帮助。 - halfer
4个回答

5

除非代理使用特殊的头信息,比如X-Forwarded-For,否则你无法将其与普通用户区分开。由于那些“黑色”代理并不是很天真(它们的目的是保护其用户,请记住),你唯一的选择是使用IP黑名单 - 比如由Project Honeypot提供的黑名单。


感谢raina77ow。找到了这个代码,看起来能正常工作。http://snipplr.com/view/64564/ - hdlmsa

4
约会网站和依赖用户生成内容的类似网站总是面临这样的问题。一个简单的检查方法是测试头部是否有任何指示代理服务器的信息。这可能会对某些移动连接造成误报:
    $proxy_headers = array(
        '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'
    );
    foreach($proxy_headers as $x){
        if (isset($_SERVER[$x])) die("You are using a proxy!");
    }

这只能捕获最低质量的代理。匿名和开放代理将始终逃避这些测试,因此您可以检查DNS黑名单,例如project honeypot,尽管这仍然存在保护漏洞。
如果不建立自己的复杂系统,则阻止这些欺诈账户的最佳方法是使用第三方服务,例如:FraudLabs、MaxMind或IPQualityScore。其中一些确实提供每月免费配额的查询。

0
你应该看看 IPDetector,它是一个 API,在其数据库中包含数百万个 IP 地址,可以帮助你检测 IP 是否好用(主机/VPN/代理...)。

0

这是一个旧问题。然而,在过去几年中,VPN检测方面出现了重大的发展,这可能对这个问题有所帮助。在地理定位服务提供商收集到足够的IP地址使用数据后,可以使用IP地址范围来检测VPN提供商。

一个例子是使用类似于https://github.com/ip2location/ip2proxy-php这样的库,该库可以查询商业或免费的IP2Proxy数据库以实现此目的。


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