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
标签:多模态安全, 请求拦截