致站长

当 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 即可。几个例子:

nginx,写在 server 或 location 块中
if ($http_user_agent ~* "CatPaw") {
    return 403;
}
Apache,使用 mod_rewrite
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} CatPaw [NC]
RewriteRule ^ - [F]
Cloudflare,自定义规则表达式,动作选“阻止”
(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。