致站长
当 CatPaw 访问你的网站
如果你在访问日志里看到 User-Agent 含有 CatPaw,那是一个由 AI agent 操作的浏览器在替某个人完成任务。本页说明这类流量是什么、怎么识别,以及如何拦截或放行。
它是什么
是浏览器,不是爬虫
CatPaw 是一个开源浏览器,AI agent 用它替用户上网办事。它不会自己顺着链接到处抓取,只加载 agent 要打开的页面,以及这些页面所需的样式表、脚本和 frame,并像普通浏览器一样执行页面上的 JavaScript。
在默认策略下,提交表单和上传文件都要等用户本人批准。运行 CatPaw 的人可以修改这一策略。
CatPaw 是由使用者自行安装、自行运行的软件。你看到的请求来自运行它的那个人或组织。CatPaw 项目本身不为请求签名,也不替任何人保管密钥。
如何识别
它会表明身份
从 0.1 版起,CatPaw 发送如下 User-Agent,页面里的 navigator.userAgent 也是同一个值:
CatPaw/<版本号> (+https://catpaw.sh/bot)
例如 CatPaw/0.1.0 (+https://catpaw.sh/bot)。页面上的脚本还会看到 navigator.webdriver 为 true:WebDriver 标准要求受自动化控制的浏览器这样报告,CatPaw 始终如此。
和任何 HTTP 客户端一样,运行 CatPaw 的人可以改掉 User-Agent 头,所以它只是一种声明,不能当作证明。能证明请求来自谁的是签名,见下文。
它不做什么
不伪装,不破解验证码
- 不冒充其他浏览器:不带模仿其他浏览器指纹的配置,也不为了与之匹配去调整 TLS 或 HTTP/2 参数。
- 不破解验证码,也不接入任何打码服务。页面出现面向真人的验证时,agent 可以把这个 tab 交给用户:用户在自己的浏览器里看到页面,亲自完成验证;页面始终留在 CatPaw 里,用户的点击和按键会转发给它。
- 没有住宅代理轮换功能。验证码破解、指纹伪装和代理轮换这几类功能,项目一律不接受(见 ADR 0003,英文)。
- 不读取 robots.txt。如果不希望 CatPaw 访问你的网站,请按下文的方法根据 User-Agent 拦截。
CatPaw 进不了所有网站,放不放行由网站所有者决定。
拦截或放行
匹配 CatPaw 这个标记
在 User-Agent 头里匹配 CatPaw 即可。几个例子:
server 或 location 块中
if ($http_user_agent ~* "CatPaw") {
return 403;
}RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} CatPaw [NC]
RewriteRule ^ - [F](http.user_agent contains "CatPaw")如果只想放行某个你信任的部署,而不是所有 CatPaw 流量,请校验它的签名,不要只看 User-Agent。
签名请求
Web Bot Auth
运行 CatPaw 的人可以用 Web Bot Auth 为请求签名,即带 web-bot-auth 标签的 HTTP Message Signatures(RFC 9421),使用他们自己的 Ed25519 密钥:用 catpaw keygen 生成,再通过 --bot-auth-key 和 --signature-agent 启用。签名后的请求带有三个头:
Signature-Agent: sig="https://agent.example"
Signature-Input: sig=("@method" "@authority" "@path" "signature-agent";key="sig");created=...;expires=...;keyid=...;nonce=...;alg="ed25519";tag="web-bot-auth"
Signature: sig=:...:
公钥发布在 <Signature-Agent 的源>/.well-known/http-message-signatures-directory,keyid 是该公钥的 JWK 指纹(RFC 7638)。签名有效,说明请求确实来自那个部署;但这不代表 CatPaw 项目为它担保:项目本身不签名,也不向任何机构登记。需要经过验证的身份的部署者,可以自行在 Cloudflare 登记为 Signed Agent,Cloudflare 会在规则中把验证结果提供给站长。
联系
找谁
- 某个部署发来的流量:请联系它的运营者。请求带签名时,
Signature-Agent头会写明是谁。 - CatPaw 软件本身的问题,比如 bug 或疑问:GitHub issues。
- 安全问题:在 GitHub 上私下提交 security advisory。