【问题标题】:How can i block all CloudFlare IPs in PHP如何在 PHP 中阻止所有 CloudFlare IP
【发布时间】:2017-11-05 14:19:22
【问题描述】:

我遇到了一些使用 cloudflare 的代理网站的问题,它们正在隐藏我的网站并对其进行垃圾索引。

如何在 php 中阻止所有 cloudflare ip,以便这些正在抓取我的网站的网站被阻止.. 还是有更好的解决方案? 我的网站也在使用 cloudflare。

【问题讨论】:

  • 是的 X 和 Y ... 什么?
  • @MihaiGalan 他的意思是你需要更详细地解释潜在的问题,而不是你目前想到的解决方案。
  • @MihaiGalan 不,根本问题是什么?您提出的解决方案非常不寻常,我对您为什么要问这个问题感到困惑。我们需要知道实际发生了什么以及它是如何导致问题的。您需要在问题中添加更多细节,了解正在发生的事情以及它如何影响您的网站。
  • 首先:检查您的日志文件。抓取工具不一定需要与模仿者位于同一主机上。

标签: php block cloudflare


【解决方案1】:

幸运的是,cloudflare 提供了他们的 IP 范围here 的列表,因此只需检查连接的 IP 是否在这些范围的 1 内,如果是则 exit()。

使用M6Web/Firewall的示例实现:

use M6Web\Component\Firewall\Firewall;

if(!((new Firewall())->setDefaultState(true)->addList(file('blacklist.txt',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES),'localBad')->setIpAddress($_SERVER['REMOTE_ADDR'])->handle())){
     http_response_code(403);
     exit();
}

附带每日定时任务:

<?php
$ips = file_get_contents ( 'https://www.cloudflare.com/ips-v4' ) . "\n" . file_get_contents ( 'https://www.cloudflare.com/ips-v6' );
file_put_contents ( '/path/to/blacklist.txt', $ips );
  • 请注意,手动实现 ipv6 cidr 范围会很困难,因此您可能应该使用第 3 方库,例如 M6Web 防火墙。此外,使用 iptables 执行此操作比在 php 级别执行此操作要好得多。

  • cronjob 并不是真正需要的,您可以在每次页面加载时获取一个新的 ips 列表,但这可能会很慢,而且,也许具有讽刺意味的是,您可能会从 cloudflare 中获得自动 ip-banned。 com 用于发送垃圾邮件,因此我强烈建议您使用每日 cronjob。

【讨论】:

    【解决方案2】:

    如何阻止所有 cloudflare ip

    我的网站也在使用 cloudflare

    您不能 - 否则您将无法自己使用 cloudflare。

    更好的解决方案是让您的网络服务器(例如 apache 或 nginx)检查主机标头(这是用户在地址栏中看到的),如果它不是您的普通域,则只需 301 重定向(永久) - 这将告诉搜索引擎内容已从报废站点“移动”到合法站点

    【讨论】:

    猜你喜欢
    • 2013-09-26
    • 1970-01-01
    • 2019-05-24
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    相关资源
    最近更新 更多