Nginx 通过 User-Agent 禁止采集机器人并返回炸弹

刚刚看到一篇帖子, 通过 User-Agent 禁止机器人并返回炸弹

可以通过 User-Agent 字段来识别并禁止恶意爬虫, 甚至可以返回特定的数据给恶意程序。返回 404/403 瞬间不香了, 以前只知道直接禁了垃圾 bot, 现在我们可以直接返回一个特定的"炸弹"文件, 达到更强的反爬效果。

例如, 实际 1GB 文件压缩成 1MB 大小的 gzip 文件 (炸弹) 来干扰恶意程序的正常采集行为。对于服务器来说, 实际上发送了 1MB 的数据, 但解压后的内容可能会达到 1GB, 恶意程序在请求后会自动解包 (如果程序支持), 可以对恶意程序造成很大的压力 (消耗大量服务器资源)。

蜘蛛会分析页面, 这种方法可以恶心一下蜘蛛, 还可以在一定程度上消耗其读取文件所需的内存。

使用 PHP 返回炸弹

你可以将下面的 PHP 代码保存为 bomb.php 文件, 并放在网站目录中, 供恶意爬虫访问时使用

<?php
header('Content-Encoding: gzip');
echo file_get_contents('1G.gzip');

如何制造炸弹文件

插件中未提供炸弹, 因此你必须自己创建一个炸弹。在 Linux 系统中, 创建炸弹文件很容易, 你可以使用以下命令生成一个压缩的炸弹文件。以下是如何创建不同大小的 .gzip 文件

# 创建 1GB 的压缩文件
dd if=/dev/zero bs=1M count=1024 | gzip > 1G.gzip

# 创建 10GB 的压缩文件
dd if=/dev/zero bs=1M count=10240 | gzip > 10G.gzip

# 创建 1TB 的压缩文件
dd if=/dev/zero bs=1M count=1048576 | gzip > 1T.gzip

为了进一步优化最终的炸弹文件, 你可以对其进行多次压缩

# 压缩 10GB 文件两次
cat 10G.gzip | gzip > 10G.gzipx2

# 压缩 1TB 文件四次
cat 1T.gzip | gzip | gzip | gzip > 1T.gzipx4

注意: .gzipx2.gzipx4 的扩展名只是突出显示文件被压缩了多少次

将生成的炸弹文件 1G.gzipbomb.php 放在同一目录中

在 Nginx 中添加配置

你可以通过修改 Nginx 配置来针对特定的 User-Agent 返回炸弹文件。示例如下

location / {
  # 根据 User-Agent 返回炸弹文件
  if ($http_user_agent ~* "(zhadan|bomb)") {
    rewrite ^/.*  /bomb.php last;
  }
}

在这里, (zhadan|bomb) 是恶意 User-Agent 列表, 你可以根据需要替换为其他常见的恶意爬虫或机器人的 User-Agent。修改 /bomb.php 为你的炸弹 PHP 文件路径


原文

学到了, 通过User-Agent禁止机器人并返回炸弹
Nginx通过User-Agent禁止机器人并返回炸弹
Nginx通过User-Agent禁止采集机器人并返回炸弹 博客地址

最后更新于 2025-02-17
使用 Hugo 构建
主题 StackJimmy 设计