【问题标题】:Detecting proxies via PHP通过 PHP 检测代理
【发布时间】:2017-06-12 05:01:14
【问题描述】:

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

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');
}

感谢您的帮助:)

【问题讨论】:

  • 可能就够了。您无法检查所有REMOTE_PORTs。 fsockopen 操作可能会将您的网站标记为恶意软件。
  • 为什么端口 80 被视为代理?我不会咨询http_ 标头。

标签: php proxy


【解决方案1】:

端口扫描不是很准确,效果也不是很好。许多代理不在您正在查看的标准化端口上运行。最重要的是,仅仅因为某人在端口 80 上运行了一些东西,并不意味着它是代理 IP。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 2010-10-25
      • 2016-08-10
      相关资源
      最近更新 更多