我想在我的网站上集成一个好的代理检测器脚本。因此,在搜索时我得到了这段代码。
$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!");
}
然后我尝试通过ngrok访问我的localhost网站,它阻止我查看返回“你正在使用代理!”。我尝试使用hidemyass和另一个代理检测器,我得到了相同的结果。这是hidemyass类型代理站点的我想要的。现在我的问题是ngrok还使用代理服务器,因为它阻止我访问?我读了一些人的评论,HTTP_X_FORWARDED_FOR
对他的互联网直接连接返回误报。我试图删除这个和wooo,不再检测hidemyass或其他代理。可通过代理访问网站。所以,我认为这很重要。所以,我的第二个问题是HTTP_X_FORWARDED_FOR
真的会返回假阳性吗?或者是因为ngrok也使用代理,即使我在直接连接上也无法访问我的网站?是否完全可以使用HTTP_X_FORWARDED_FOR
?您在此脚本中看到的任何散文或缺点请告诉我。
答案 0 :(得分:1)
没有明确的标准可以简单地通过HTTP标头对VPN或Web代理服务器后面的用户进行分类,
您还阻止了许多在合法网络中使用Web代理的用户,例如大学校园或有严格网上冲浪政策的政府机构。
您最好的机会是获取与其相关的AS号和IP范围相关的IP地址,并阻止Web服务器中的整个IP空间或将其重定向到您的特定Web服务器。
识别使用互联网代理的用户的另一个最佳方法是使用Flash中提供的Flash作为RTMFP协议,并且可以与https://github.com/randunel/ArcusNode一起使用(另请参阅https://github.com/OpenRTMFP)。因此,在服务器上,您应该等待消息并通过闪存记录远程IP,然后将其与您的IP REMOTE_ADDR进行比较,如果不相等,则用户可能在防火墙后面。
我还建议为两个IP获取AS号,如果两个IP ASN不相同,那么用户肯定会滥用
如果ASN相同,那么用户就是一个非常奇怪的ISP,它可以通过不同的方式重定向网络流量。
获取IP的ASN,你可以执行命令:
whois -h whois.cymru.com "216.90.108.31" |grep -v 'AS |'|grep -v whois.cymru.com| awk '{print $1}'
答案 1 :(得分:0)
代理检测是一个复杂的问题,需要经常注意才能使事情正确。大多数代理/ VPN都不会显示任何转发标头,因此您无法使用该代码捕获足够的代理连接。
您可能会发现一些有用的在线服务
GetIPIntel.net - 免费提供API代理/ VPN检测。他们使用机器学习和概率论技术来确定IP地址的分数。
Maxmind - 通过API提供代理/ VPN检测。它目前被列为遗留服务。
W I T C H - 查看在服务器端实现的可以捕获OpenVPN连接的MSS值。