什么是 reCAPTCHA?它是如何工作的?v2、v3 与评分详解

what is recaptcha - What Is reCAPTCHA and How Does It Work?

reCAPTCHA 是 Google 的机器人检测,也几乎是你一定遇到过的那一种。它有四种形式:“我不是机器人”复选框、一个隐形变体、一个静默评分版本,以及一个 Enterprise 层级。它们看起来不同,是因为打断你的方式不同,但底层做的是同一件事。

下面介绍每个版本是如何做出判断的、token 流程实际是怎样运作的,以及如何辨别某个网站运行的是哪一个版本。

reCAPTCHA 是什么

它是 Google 向网站所有者提供的一项真人验证服务。只需在页面中放入一段脚本,Google 就会告诉你的后端某次交互看起来是否像真人。

它出现在攻击者觊觎的各类入口之前:登录页面、注册、联系表单、结账、密码重置、搜索。凡是无人值守的脚本可能造成破坏或带来金钱损失的地方,都能见到它。

一个重要的区别: 验证码 是真人验证测试这一大类的统称。reCAPTCHA 是 Google 在这一类别中推出的产品。Cloudflare Turnstile、极验(GeeTest)和 hCaptcha 则是同一领域中的竞争对手。

reCAPTCHA 的工作原理

每个版本都遵循相同的三个步骤,只有中间一步有所不同。

  1. 页面加载 Google 的脚本,脚本开始收集信号。
  2. Google 做出判断:静默放行、显示挑战,或对该次交互进行评分。
  3. 你的浏览器会收到一个短时有效的 token,它会随表单一起提交。

token 才是整个机制的核心,也是人们最容易忽略的部分。仅仅在浏览器中通过挑战本身并不能证明什么。网站的后端必须用这个 token 向 Google 进行核验:

# The server side of every reCAPTCHA version. Same endpoint.
curl -X POST https://www.google.com/recaptcha/api/siteverify \
  -d secret=YOUR_SECRET_KEY \
  -d response=THE_TOKEN_FROM_THE_PAGE

# {"success":true,"score":0.9,"action":"login","hostname":"example.com"}

有两个后果值得了解。token 大约在两分钟后过期,因此一个开着太久的表单提交的会是一个已失效的 token。而一个从不调用该端点的网站,无论其小组件看起来多么可信,实际上都毫无防护。

Google 在发放 token 之前所权衡的因素包括:光标和滚动行为、浏览器和设备特征、IP 历史记录、来自以往 Google 交互的 cookie,以及时间特征。这就是为什么使用 VPN 的全新无痕窗口,比你日常使用的浏览器更容易被要求进行挑战。

四个版本

reCAPTCHA v2 复选框

就是那个熟悉的勾选框。勾选它并不是测试本身:测试是你在移向它的整个过程中被测量到的一切。信号较弱时会转而出现一个图片网格,这是升级验证的路径,而不是另一款独立产品。请参阅 reCAPTCHA v2 ,了解该流程在自动化中的表现。

隐形 reCAPTCHA

去掉复选框的 v2。它绑定到你的提交按钮,或在页面加载时触发,大多数访客什么都看不到。当信号较弱时,同样的图片挑战会出现。从网站所有者的角度看,它就是把摩擦从正常流程中移出去的 v2。

reCAPTCHA v3

从不出现挑战。它在每次验证时返回一个从 0.0 到 1.0 的评分,其中 1.0 表示良好的交互,0.0 表示机器人,并把决定权交给网站。Google 建议以 0.5 作为起始阈值。

这把实实在在的工作转嫁给了网站所有者:现在由你来决定低分会给访客带来什么后果。直接拦截是常见的错误,因为它会把使用企业 VPN 和隐私浏览器的人挡在门外。升级到更强的检查才是更好的做法。如果你自己的评分总是偏低,我们撰写了 能提升 reCAPTCHA v3 评分的六种方法。该版本的详细信息见 reCAPTCHA v3.

reCAPTCHA Enterprise

它是 Google 的另一个产品层级,而非第五个版本。Enterprise 同时运行 v2 风格和 v3 风格的流程,并为有需要的组织增加了报表、调优和风险功能。这在实践中很重要:“Enterprise”和“v3”是相互独立的设置,某个验证码可以是 v2 Enterprise,也可以是 v3 Enterprise。 reCAPTCHA Enterprise 介绍了它们之间的区别。

如何辨别网站运行的是哪个版本

打开页面源代码,查看它加载的脚本。

你所看到的它是什么
一个可见的复选框小组件v2 复选框
没有小组件,但有一个 位于右下角的徽标v3 或隐形(Invisible)
grecaptcha.execute() 带有一个 actionv3
grecaptcha.enterprise 出现在源代码中的任何位置Enterprise,任一版本
/recaptcha/enterprise.js 作为脚本 URLEnterprise,任一版本

sitekey 本身说明不了任何问题,因为它们看起来都一样。请以脚本为准。

v2 还是 v3,各自的代价是什么

两者并无绝对的优劣,它们的失效方向恰好相反。

v2 对用户是坦诚的。有一个可见的步骤,人们明白自己正在被检查,通过还是失败也一清二楚。代价是给每一位访客都带来摩擦,包括那些本来毫无风险的人。

v3 对正常流量而言是隐形且低成本的,但它把艰难的决定推给了你。阈值一旦设错,你要么放机器人通过,要么在毫无解释、也无从申诉的情况下悄悄挡住客户。这种失效方式之所以更糟,恰恰是因为它是静默的。

通常明智的做法是:在整个网站部署 v3 来给流量评级,同时预留一个 v2 挑战,用于应对在重要操作上评分较低的情况。

常见问题

用简单的话说,什么是 reCAPTCHA?

这是 Google 提供的一项服务,帮助网站判断访客是真人还是脚本。有时它会要求你做点什么,但更多时候它只是观察你的行为,然后悄悄做出判断。

CAPTCHA 和 reCAPTCHA 有什么区别?

CAPTCHA 是一个大类:任何把真人与脚本区分开的测试都属于它。reCAPTCHA 是 Google 在这一类别中的产品。每一个 reCAPTCHA 都是验证码,但许多验证码——比如 Cloudflare Turnstile 或极验(GeeTest)——与 Google 毫无关系。

什么是 reCAPTCHA v2?

就是复选框版本,加上信号较弱时它所回退到的图片网格。此外还有一个隐形(Invisible)变体,它运行相同的逻辑,却完全不显示复选框。

什么是 reCAPTCHA v3?

就是评分版本。它从不显示挑战,而是在每次验证时返回一个介于 0.0 和 1.0 之间的数值,并把如何处理低分的决定权留给网站。Google 建议的起始阈值是 0.5。

网站为什么使用 reCAPTCHA?

为了减少垃圾信息、虚假注册、撞库、网络爬虫和试用滥用,而无需自行构建一套反机器人系统。它只需几行标记代码和一次服务器端调用,这就是它随处可见的原因。

小结

reCAPTCHA 收集信号、做出判断,并向你的浏览器交付一个 token,你的后端必须用它向 Google 核验。v2 会公开发问,隐形版只在拿不准时才发问,v3 从不发问而是改用评分,而 Enterprise 是一个更高层级,它以任一种方式运行,并在其上提供更多控制。

查看 script 标签就能弄清你面对的是哪一个,同时记住 token 大约在两分钟后过期。如果你在测试自己的表单,并且需要可靠地通过这道检查,CapSkip 可以完成 验证码绕过 ,就在你自己的机器上完成。