Anubis 的工作量证明验证是如何阻挡 AI 爬虫的?

Anubis 用一道“轻量计算题”替代传统图形验证码:每个访问者都要先完成少量计算才能继续访问,对单个真实用户几乎无感,但当成千上万次请求来自同一批爬虫时,累积的计算成本会显著上升,让大规模抓取变得不划算。ctsnet.org 显示的“正在确认你是不是机器人”正是这套机制在运行。它适合服务器被 AI 爬虫高频抓取、又不想用复杂验证码打扰用户的场景;代价是访问者必须启用 JavaScript。

工作量证明的核心思路

Anubis 采用的是类似 Hashcash 的工作量证明(Proof-of-Work)机制。Hashcash 最初被提出来是为了减少垃圾邮件:发一封邮件要先算出一个满足特定条件的哈希值,发一两封没感觉,但群发百万封的代价就会急剧放大。

Anubis 把同样的逻辑搬到网页访问上:

  • 对个别用户:多花的那点计算时间可以忽略,正常浏览基本不受影响。
  • 对大规模爬虫:每一次请求都要付出计算成本,请求量越大,累积成本越高,抓取行为因此变得更困难、更不经济。

这就是它和普通验证码的关键区别——验证码考验的是“你是不是人”,工作量证明考验的是“你愿不愿意为每次访问付出成本”。前者靠识别,后者靠经济杠杆。

为什么 ctsnet.org 会出现这个页面

根据页面上的说明,ctsnet.org 启用了 Anubis 来保护服务器,避免 AI 公司大量爬取网站内容。这类高频抓取会导致服务器负载过高甚至崩溃,让所有用户都无法正常访问。

Anubis 被描述为一种折中做法:既挡住大规模爬虫,又尽量不把负担转嫁给真实用户。页面也明确说,这是一个占位符解决方案,目的是争取时间去做更精细的指纹识别和无头浏览器识别(例如通过字体渲染方式判断),未来有望不再向更可能是合法用户的访问者展示工作量证明页面。

卡在验证页面时的排查方向

如果你一直停在“正在确认你是不是机器人”,可以按下面几点检查:

  1. 确认 JavaScript 已启用。页面明确说明,必须启用 JavaScript 才能通过验证,因为无 JavaScript 的解决方案仍在开发中。
  2. 检查是否装了拦截类插件。像 JShelter 这类插件可能会阻挡 Anubis 需要的现代 JavaScript 功能。页面建议为此域名停用 JShelter 或类似插件。
  3. 重新加载页面。页面提示,如果 Anubis 无法载入所需的 JavaScript,可能是服务器负载过高,重新加载再试一次。
  4. 换一个浏览器或环境。如果插件配置复杂,用未装拦截插件的浏览器访问往往能直接通过。

这套机制适合什么情况

维度 表现
对真实用户 额外计算负担可忽略,但必须启用 JavaScript
对爬虫 每次请求都要付出计算成本,规模越大越不划算
与验证码相比 不靠识别“是不是人”,靠抬高批量访问的成本
当前定位 占位符方案,后续可能被更精细的识别手段替代

简单说,Anubis 不是要把机器人“认出来”,而是让机器人“算不起”。对偶尔访问的普通用户,这道门槛几乎不存在;对靠量取胜的抓取行为,它抬高了成本。代价是访问者必须让 JavaScript 正常工作,并留意拦截插件是否误伤。

ctsnet.org