Anubis 的工作量证明验证是如何阻挡 AI 爬虫的?
Anubis 用一道“轻量计算题”替代传统图形验证码:每个访问者都要先完成少量计算才能继续访问,对单个真实用户几乎无感,但当成千上万次请求来自同一批爬虫时,累积的计算成本会显著上升,让大规模抓取变得不划算。ctsnet.org 显示的“正在确认你是不是机器人”正是这套机制在运行。它适合服务器被 AI 爬虫高频抓取、又不想用复杂验证码打扰用户的场景;代价是访问者必须启用 JavaScript。
工作量证明的核心思路
Anubis 采用的是类似 Hashcash 的工作量证明(Proof-of-Work)机制。Hashcash 最初被提出来是为了减少垃圾邮件:发一封邮件要先算出一个满足特定条件的哈希值,发一两封没感觉,但群发百万封的代价就会急剧放大。
Anubis 把同样的逻辑搬到网页访问上:
- 对个别用户:多花的那点计算时间可以忽略,正常浏览基本不受影响。
- 对大规模爬虫:每一次请求都要付出计算成本,请求量越大,累积成本越高,抓取行为因此变得更困难、更不经济。
这就是它和普通验证码的关键区别——验证码考验的是“你是不是人”,工作量证明考验的是“你愿不愿意为每次访问付出成本”。前者靠识别,后者靠经济杠杆。
为什么 ctsnet.org 会出现这个页面
根据页面上的说明,ctsnet.org 启用了 Anubis 来保护服务器,避免 AI 公司大量爬取网站内容。这类高频抓取会导致服务器负载过高甚至崩溃,让所有用户都无法正常访问。
Anubis 被描述为一种折中做法:既挡住大规模爬虫,又尽量不把负担转嫁给真实用户。页面也明确说,这是一个占位符解决方案,目的是争取时间去做更精细的指纹识别和无头浏览器识别(例如通过字体渲染方式判断),未来有望不再向更可能是合法用户的访问者展示工作量证明页面。
卡在验证页面时的排查方向
如果你一直停在“正在确认你是不是机器人”,可以按下面几点检查:
- 确认 JavaScript 已启用。页面明确说明,必须启用 JavaScript 才能通过验证,因为无 JavaScript 的解决方案仍在开发中。
- 检查是否装了拦截类插件。像 JShelter 这类插件可能会阻挡 Anubis 需要的现代 JavaScript 功能。页面建议为此域名停用 JShelter 或类似插件。
- 重新加载页面。页面提示,如果 Anubis 无法载入所需的 JavaScript,可能是服务器负载过高,重新加载再试一次。
- 换一个浏览器或环境。如果插件配置复杂,用未装拦截插件的浏览器访问往往能直接通过。
这套机制适合什么情况
| 维度 | 表现 |
|---|---|
| 对真实用户 | 额外计算负担可忽略,但必须启用 JavaScript |
| 对爬虫 | 每次请求都要付出计算成本,规模越大越不划算 |
| 与验证码相比 | 不靠识别“是不是人”,靠抬高批量访问的成本 |
| 当前定位 | 占位符方案,后续可能被更精细的识别手段替代 |
简单说,Anubis 不是要把机器人“认出来”,而是让机器人“算不起”。对偶尔访问的普通用户,这道门槛几乎不存在;对靠量取胜的抓取行为,它抬高了成本。代价是访问者必须让 JavaScript 正常工作,并留意拦截插件是否误伤。