dkd-dobberkau/goodbot-badbot

GitHub: dkd-dobberkau/goodbot-badbot

监测AI爬虫对robots.txt的遵守情况。

Stars: 0 | Forks: 0

# goodbot-badbot 一个小型公开实验,用于衡量人工智能爬虫是否真正尊重 `robots.txt`。该网站声明了六个蜜罐路径为`Disallow`。任何对其中任何一个路径的请求——无论用户代理是谁——都会被记录为违规,并在实时公共仪表板上显示。 网站的其余部分对所有机器人开放,因此可以干净地衡量对单个 `Disallow`规则的遵守:一个尊重的爬虫会点击主页并停止;一个不尊重的爬虫会继续进入蜜罐。 ## 蜜罐路径 ``` /do-not-crawl/ linked from homepage /training-data-forbidden/ linked from homepage /no-ai-allowed/ linked from homepage /private/ unlinked anywhere /honeypot/ unlinked anywhere /robots-test/ unlinked anywhere ``` 所有六个都在`/robots.txt`中列出为`Disallow`。任何对这些路径的击中都是违规行为,但两组 测量的是微妙不同的东西: - **链接**(三个路径,主页上有可见的``): 捕捉到遵循链接并忽略相应 `Disallow`规则的爬虫。这是“没有尊重 robots.txt”的最明显信号。 - **未链接**(三个路径,网站上任何地方都没有``):发现它们的唯一方法是阅读`/robots.txt`,然后使用 `Disallow`列表作为爬虫的种子(“宝藏地图”反模式)或猜测路径。这里的击中意味着机器人 积极使用了robots.txt作为输入。 如果没有链接的子集,该网站只会捕捉到第二种行为。如果没有未链接的子集,该网站就无法区分“将robots.txt用作种子”和“偶然发现了一个链接”。 ## 识别的机器人 当识别出已知的用户代理子串时(GPTBot、ClaudeBot、CCBot、Bytespider、PerplexityBot、Google-Extended、Applebot-Extended、Diffbot、cohere-ai、YouBot等)会对访问进行标记。 未知用户代理仍然会被记录,只是没有归属。 ## 栈 - FastAPI(Python 3.12,异步) - aiomysql 对 MySQL 8.4 - 纯 HTML / CSS / 无 JS 框架 - Docker 用于本地开发和生产 - 自托管 Google Fonts,运行时无外部 CDN ## 本地开发 ``` docker compose up -d --build open http://localhost:8000 ``` 这会启动 FastAPI 应用和一个带有健康检查的`mysql:8.4`服务; 应用等待数据库并在启动时创建其模式。连接 设置来自`docker-compose.yml`中的`MYSQL_*`环境变量。 ## API 参考 ``` GET / # dashboard GET /robots.txt # the honeypot rules GET /api/stats # JSON: per-bot summary + recent violations GET /favicon.ico # 🤖 ``` ## 代理可发现性 该网站实现了 HTTP 层代理就绪信号:一个从`robots.txt`引用的站点地图, 主页上的 RFC 8288 `Link` 标头,内容信号声明 AI 使用策略(`search=yes, ai-input=yes, ai-train=no`),内容协商为`Accept: text/markdown`,以及位于`/.well-known/http-message-signatures-directory`的 JWKS 用于 Web 机器人 身份验证。 故意**不**实现 AI 发现的 DNS(DNS-AID)。DNS-AID 存在是为了将代理指向 A2A / MCP / JSON-RPC 端点; goodbot-badbot 没有这样的端点来宣传。发布一个指向 HTML 仪表板或统计 JSON 的 SVCB 记录将是 合规性戏剧。该网站是代理的观察者,而不是代理。 ## 隐私 IP 地址在存储之前被 SHA-256 哈希并截断到前 16 个十六进制字符。 原始 IP 从未接触过磁盘。 ## 许可证 MIT
标签:多模态安全, 请求拦截