2017-06-12 68 views
0

我想检测一个人是否使用代理访问我的网站,如果它是真的,那么限制他访问该网站。我在某处找到了这段代码,但我不确定它是否会起作用。有人可以解释一下它是否足够,或者我是否需要添加其他任何东西以及这段代码如何工作?通过PHP检测代理

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

这可能就够了。你无法检查所有'REMOTE_PORT's。 'fsockopen'行动可能将您的网站标记为mallware。 – FieryCat

+0

为什么端口80被视为代理?我不会咨询'http_'头。 – chris85

回答

1

端口扫描是不是很准确,也不能很好地工作。很多代理服务器不会在您正在查看的标准化端口上运行。最重要的是,仅仅因为某人在端口80上运行了某些东西,并不意味着它是代理IP。

总而言之,代理/ VPN检测是一个复杂的问题需要解决。有一个由GetIPIntel制作的免费API,它使用机器学习和概率论技术来生成IP是代理/ VPN的可能性的评分。 Maxmind也提供了一个,但它被视为“传统”服务,它不是免费的。

0

您的算法存在缺陷:扫描HTTP/s端口80和443,这对所有服务器都非常常见。某些VPN提供商确实正在使用这些端口来隐藏他们的服务。

您应该采用黑名单方法,您可以根据已知的代理服务器或VPN列表查询访问者IP地址。一个免费的数据库正在使用IP2Proxy LITE,这是来自IP2Proxy的每日更新列表的子集。也可以使用Web服务,这可以减少日常数据库更新。产品页面提供免费样品代码。