我想检测一个人是否使用代理访问我的网站,如果确实如此,则限制他访问该网站。我在某个地方发现了这段代码,但我不确定它是否会起作用。有人可以解释一下它是否足够,或者我是否需要添加其他内容以及这段代码如何工作?
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');
}
感谢您的帮助:)
答案 0 :(得分:1)
端口扫描不是很准确,并且不能很好地工作。许多代理不会在您正在查看的标准化端口上运行。最重要的是,仅仅因为有人在端口80上运行某些东西并不意味着它是代理IP。
总的来说,代理/ VPN检测是一个需要解决的复杂问题。有GetIPIntel制作的免费API,它使用机器学习和概率论技术来生成IP作为代理/ VPN的可能性。 Maxmind也提供一个,但它被视为"遗产"服务并且它不是免费的。
答案 1 :(得分:0)
您的算法存在缺陷,扫描HTTP / s端口80和443,这对所有服务器都很常见。确实有些VPN提供商正在使用这些端口来隐藏他们的服务。
您应该采用黑名单方法,根据已知的代理服务器或VPN列表查询访问者的IP地址。一个免费数据库正在使用IP2Proxy LITE,它是IP2Proxy每日更新列表的子集。还提供Web服务,可以简化您的日常数据库更新。产品页面中提供免费样品代码。