为什么要尝试阻止代理?
通常,服务器/网站所有者会尝试阻止代理,以防止其成员在服务器/网站上进行恶意操作时绕过 IP 禁令或隐藏其身份。虽然我能理解其背后的原因,但检测代理服务器带来的麻烦比它解决的要多。
检测代理的缺点
- 您的检测方法越好,您的服务器就会越慢。
- 这绝不是 100% 万无一失的!无论您尝试什么,都无法检测并阻止所有这些。
- 有少数人有正当理由使用代理。例如来自中国的人,他们的封面屏蔽了很多网站。
那我应该怎么做呢?
有更好、更安全的方法来保护您的服务器/网站。有很多方法可以将它们全部命名,但其中有几个是:
- 正则表达式 - 控制用户输入。
- 安全文件上传/下载 - 有关详细信息,请参阅this PDF 文件。
- 通过 SMS 之类的方式激活帐户 - 不是 IP 禁令,而是阻止电话号码。
一些改进代理检测的方法
标头检测(对匿名代理不起作用):
$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!") };
}
积极的端口扫描检测(不推荐!!!): *
$ports = array(8080,80,81,1080,6588,8000,3128,553,554,4480);
foreach($ports as $port) {
if (@fsockopen($_SERVER['REMOTE_ADDR'], $port, $errno, $errstr, 30)) {
die("You are using a proxy!");
}
}
*此方法会大大降低您的服务器速度。它还会产生大量误报,并可能触发您的访问者病毒扫描程序/防火墙。
其他检测方法包括Detect and Block TOR exit nodes 并使用许多公共代理列表,您可以通过Google 找到。请始终牢记,使用这些方法会成倍地降低您的服务器速度!这就是为什么我建议使用不同的方法保护您的服务器/网站。