【问题标题】:How to Detect or prevent proxy browsing如何检测或阻止代理浏览
【发布时间】:2015-12-04 05:27:23
【问题描述】:

我建立了一个网站,我想在我的网站中限制代理浏览。我有搜索和谷歌这个问题,但我没有得到适当的方法来做到这一点, 有什么方法可以检测/防止代理浏览?

【问题讨论】:

  • 一些你应该用谷歌搜索的东西:HTTP_X_FORWARDED_FOR、公共代理列表、check.torproject.org/cgi-bin/TorBulkExitList.py 等等......
  • 有几种方法可以改进代理检测。但是,100% 傻瓜证明检测不存在。

标签: php html apache proxy server


【解决方案1】:

为什么要尝试阻止代理?
通常,服务器/网站所有者会尝试阻止代理,以防止其成员在服务器/网站上进行恶意操作时绕过 IP 禁令或隐藏其身份。虽然我能理解其背后的原因,但检测代理服务器带来的麻烦比它解决的要多。

检测代理的缺点

  1. 您的检测方法越好,您的服务器就会越慢。
  2. 这绝不是 100% 万无一失的!无论您尝试什么,都无法检测并阻止所有这些。
  3. 有少数人有正当理由使用代理。例如来自中国的人,他们的封面屏蔽了很多网站。

那我应该怎么做呢?
有更好、更安全的方法来保护您的服务器/网站。有很多方法可以将它们全部命名,但其中有几个是:

  • 正则表达式 - 控制用户输入。
  • 安全文件上传/下载 - 有关详细信息,请参阅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 找到。请始终牢记,使用这些方法会成倍地降低您的服务器速度!这就是为什么我建议使用不同的方法保护您的服务器/网站。

【讨论】:

    【解决方案2】:

    代理检测非常复杂,因为主机可以在几秒钟内成为代理。大多数代理服务器会隐藏它们是代理的事实,因此检查 HTTP 标头是不够的。通过 API 提供付费和免费解决方案(集成和使用非常简单)。我已经在另一个帖子中讨论过它们,但我也会在这里重申一些来源。

    付费:
    MaxMind - 通过 API 进行代理检测,5 美元 / 1000 次查询。作为 GeoIP 数据库及其欺诈检查系统最知名的公司之一,他们还拥有代理检测 API。

    免费:
    GetIPIntel - 每分钟最多允许 15 个免费查询。它正在积极开发中,他们声称使用机器学习来检测 IP 是否是代理。有用于使用该网站的各种 CMS 的插件,根据我的经验,结果非常准确。

    如果您只遇到 VPN 问题,请查看 W I T C H。它不是 API 实现,但它仍然是免费的。

    【讨论】:

    【解决方案3】:

    您可以查看这个 ip2proxy 库,https://github.com/ip2location/ip2proxy-php,如果这能满足您的需求。

    以下是示例代码:

    require 'class.IP2Proxy.php';
    
    $db = new \IP2Proxy\Database();
    $db->open('./samples/IP2PROXY-IP-PROXYTYPE-COUNTRY-REGION-CITY-ISP.SAMPLE.BIN', \IP2Proxy\Database::FILE_IO);
    
    $records = $db->getAll('1.0.241.135');
    
    if ($records['isProxy'] == 1){
        //This is a proxy, you may return 404 or redirect to other custom error page
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-21
      • 2013-12-22
      • 2010-09-05
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多