Hacker News 中文摘要

RSS订阅

有效的HTML压缩炸弹 -- A valid HTML zip bomb

文章摘要

文章探讨了针对LLM网络爬虫的解决方案,提出了一种有效的HTML压缩炸弹(zip bomb),旨在通过耗尽爬虫资源来应对其不遵守robots.txt的侵略性行为。该方法利用压缩炸弹在分发与检测资源需求上的不对称性,试图最小化分发资源,同时最大化爬虫的资源消耗。

文章总结

标题:有效的HTML压缩炸弹

主要内容:

许多网站都受到了旨在提升大型语言模型(LLM)的网络爬虫的侵扰。虽然我的网站相对幸免,但自从这一现象开始以来,我一直在寻找解决方案。今天,我介绍了一种有效的HTML压缩炸弹(gzip和brotli格式)。

问题背景: LLM网络爬虫的侵略性导致它们不遵守robots.txt文件。最初的解决方案是IP封锁,但爬虫通过使用专门的僵尸网络绕过这一限制。因此,另一种解决方案是耗尽爬虫的资源,通过压缩炸弹来耗尽它们的内存。

Gzip炸弹: 最基本的Gzip炸弹由零组成,理论压缩比为1032:1。然而,浏览器会迅速检测到这不是有效的HTML页面。因此,我挑战自己创建一个包含压缩炸弹的有效HTML页面。

HTML压缩炸弹: 我首先尝试使用HTML类,但最终选择了HTML注释作为解决方案。我编写了一个小脚本来创建一个包含10MB 'H'注释的HTML文件,然后将其压缩为Gzip格式,达到了1:1030的压缩比。

服务压缩炸弹: 我使用Nginx来提供预压缩的文件,确保服务器上不需要存储10GB的文件。通过配置Nginx的ngx_http_gzip_static_module模块,我成功地将压缩炸弹提供给支持Gzip编码的客户端。

结果: Firefox和Chrome浏览器在加载该页面时都会崩溃,分别出现NS_ERROR_OUT_OF_MEMORYSIGKILL错误。页面部分加载,标题正确,因此可以确定Selenium类型的网络爬虫会在此HTML文件上崩溃。幸运的是,没有发现可利用的安全漏洞。

未来改进: HTML注释的解决方案虽然有效,但可能不是最优雅的。未来可以探索更多方法来插入大量相同字符,以确保HTML解析器不会优化某些部分的读取。此外,我还创建了brotli版本的压缩炸弹,因为我的网站也支持brotli格式,且压缩炸弹在brotli中更为高效。

总结: 通过创建有效的HTML压缩炸弹,我成功地为网络爬虫设置了一个资源耗尽陷阱,同时确保了对合法爬虫的限制。这一解决方案虽然简单,但在应对LLM网络爬虫的侵略性方面表现出色。

评论总结

主要观点总结:

  1. 技术影响与兼容性

    • 部分用户报告了在不同浏览器和操作系统上的崩溃或错误。例如,Safari在macOS和iOS上出现了WebKit错误。
      • "Crashed 1password on safari haha" (Safari崩溃了,哈哈)
      • "Safari 18.5 (macOS) throws an error WebKitErrorDomain: 300" (Safari 18.5 (macOS) 抛出错误 WebKitErrorDomain: 300)
    • 也有用户表示在Linux上的Firefox和Chrome中未出现崩溃。
      • "Did not crash Firefox nor Chrome for me on Linux" (在Linux上,Firefox和Chrome都没有崩溃)
  2. 反爬虫策略

    • 讨论了使用zip炸弹作为反爬虫手段的可行性,认为大规模爬虫可能会避免处理评论内容,但仍可能对其他HTML元素产生影响。
      • "I can imagine the large scale web scrapers just avoid processing comments entirely" (我认为大规模爬虫可能会完全避免处理评论)
      • "If the HTML itself contained a gigantic tree of links to other zip bombs that could also have an amplifying effect on the bad scraper" (如果HTML本身包含指向其他zip炸弹的巨大链接树,可能会对不良爬虫产生放大效应)
    • 有用户分享了创建HTML zip炸弹的具体方法,认为嵌套的div标签也能达到类似效果。
      • "I make my anti-crawler HTML zip bombs like this" (我这样制作反爬虫的HTML zip炸弹)
  3. robots.txt的争议

    • 讨论了robots.txt文件的配置问题,认为许多配置不合理,且获取robots.txt文件可能会被标记为爬虫,增加了爬虫的复杂性。
      • "For every 1 robots.txt that is genuinly configured, there's 9 that make absolutely no sense at all" (每有一个合理配置的robots.txt,就有九个毫无意义的配置)
      • "GETing the robots.txt automatically flags you as a 'bot'!" (获取robots.txt会自动将你标记为爬虫)
  4. Cloudflare的处理方式

    • 提出了关于Cloudflare如何处理zip文件的疑问,是否会对未压缩内容进行缓存或直接缓存压缩文件。
      • "If you try to do that on a site with Cloudflare, what happens?" (如果你在使用了Cloudflare的网站上尝试这样做,会发生什么?)
  5. 安全性与风险

    • 有用户提醒提交的链接并非zip炸弹,可以安全点击。
      • "Note: the submission link is not the zip bomb. It’s safe to click" (注意:提交的链接不是zip炸弹,可以安全点击)
    • 也有用户表示点击链接存在风险。
      • "Risky click" (风险点击)

总结:

评论主要围绕zip炸弹的技术影响、反爬虫策略、robots.txt的配置争议以及Cloudflare的处理方式展开。部分用户报告了在不同浏览器上的崩溃情况,而另一些用户则分享了创建zip炸弹的具体方法。此外,robots.txt的配置问题引发了关于爬虫行为的讨论,而Cloudflare的处理方式也引起了关注。