Web 安全

CAPTCHA (验证码)

阅读时间约 5 分钟

什么是 CAPTCHA

CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart,全自动区分计算机和人类的公开图灵测试) 是一种用于判断网站访问者是人类还是机器人的验证测试。该概念由卡内基梅隆大学的 Luis von Ahn 等人于 2000 年正式提出,广泛应用于防止垃圾表单提交、暴力破解攻击导致的账户被盗以及自动抢票机器人等场景。

早期的 CAPTCHA 采用扭曲文字识别方式,但随着文字识别精度的提升,「只有人类才能读懂」这一前提已不再成立。截至 2026 年,主流做法不是对所有访问都出示挑战,而是先推测访问的风险,只在可疑时才要求进行额外验证。

reCAPTCHA 的演进 - 从 v1 到 v3

Google 提供的 reCAPTCHA 是 CAPTCHA 的代表性实现。其各个版本的变迁,正好勾勒出机器人对抗技术在哪里遇到瓶颈、又转向了何处。

reCAPTCHA v1 (扭曲文字方式)
显示扭曲的文字图片让用户输入。它同时兼作书籍数字化工具,将 OCR 无法识别的单词交由人类解读 (Google 于 2009 年 9 月收购 reCAPTCHA)。2014 年 12 月,Google 宣布其自身研究显示,即便是最难的扭曲文字,AI 也能以 99.8% 的准确率破解,因此仅凭扭曲文字已不再是可靠的测试。
reCAPTCHA v2 (2014-)
让用户点击「我不是机器人」复选框的方式 (2014 年 12 月公开)。当仅凭点击无法判断时,会显示图片选择挑战 (让用户选择红绿灯、人行横道、公交车等图片)。至于依据什么线索来判断,官方并未公开。
reCAPTCHA v3 (2018-)
完全不要求用户操作,而是根据用户在网站上的操作情况返回 0.0-1.0 的评分 (2018 年 10 月公开)。只有在评分较低 (机器人嫌疑较大) 时才要求额外验证。它不损害用户体验,但以哪个评分作为拦截阈值,仍是运营方需要自行解决的课题。

有一种说法广为流传:reCAPTCHA v2 让用户选择红绿灯和人行横道,是在为 Google 的自动驾驶收集训练数据。但我们找不到能够佐证这一说法的一手资料。可以确定的只是,与 v1 结合书籍数字化的做法一样,用户的回答会作为图片的标签被积累下来,至于其用途并未公开。

CAPTCHA 的技术原理

CAPTCHA 系统主要通过三种方法来区分机器人和人类。

  • 挑战式:向用户展示扭曲文字输入、图片分类或拼图滑块等任务,这些任务对人类来说很简单但对机器人来说很困难。主要缺点是增加用户摩擦,提高跳出率。
  • 行为分析式:不向用户出示任务,而是根据用户在网站上的操作情况推测风险,只在可疑时才要求进行额外验证。reCAPTCHA v3 采用此方法。用户在多数情况下不会意识到 CAPTCHA 的存在,但各服务并未公开自己使用了哪些信号。
  • 工作量证明式:要求浏览器解决轻量级计算任务,提高机器人大量发送请求的成本。Cloudflare 对 Turnstile 的说明是,它会组合运行工作量证明、空间证明以及检测 Web API 是否存在等一系列非交互式挑战。单次请求的负担很小,但对于发送数千、数万次请求的一方来说会不断累积。

实际的 CAPTCHA 不依赖单一技术,而是组合多种判断材料来推测风险。各服务并未公开其具体构成,但访问来源的 IP 地址,以及可作为浏览器指纹读取的浏览器环境信息,在机制上必然会传到服务器端。

无障碍访问的挑战

CAPTCHA 旨在证明用户是人类,但并非所有人都能以相同方式完成验证。视觉障碍用户无法完成图片选择挑战,听觉障碍用户无法使用语音 CAPTCHA,运动障碍用户可能难以进行鼠标或触摸操作。

W3C 的 Web 内容无障碍指南 (WCAG) 要求在使用 CAPTCHA 时,提供说明其用途的文本,并准备面向不同感官 (视觉、听觉等) 的替代形式。reCAPTCHA v2 提供语音挑战作为备选方案,但随着语音识别精度的提升,语音 CAPTCHA 也越来越容易被自动破解。

reCAPTCHA v3 和 Cloudflare Turnstile 等「隐形 CAPTCHA」不要求用户操作,因此可以避免挑战本身带来的障碍。但既然要依据操作情况来判断,使用屏幕阅读器或仅使用键盘操作的用户被误判为「类似机器人」的风险依然存在。

AI 破解与 CAPTCHA 的未来

CAPTCHA 的根本前提是「某些任务对人类容易但对 AI 困难」,然而 AI 能力的快速提升正在动摇这一前提。

  • 图像识别 AI:选择红绿灯和人行横道的任务,正是通用目标检测模型日常处理的工作,把图片分类当作「只有人类才能完成的任务」这一设计前提已经站不住脚。
  • CAPTCHA 破解服务:既有人工解决验证挑战的「CAPTCHA 农场」,也有将机器处理与人工结合的破解服务。单次破解的价格会淹没在攻击整体的费用之中,对僵尸网络运营者来说很难构成障碍。
  • 浏览器自动化工具:Puppeteer 和 Playwright 等浏览器自动化框架能够驱动真实浏览器,重现人类的操作方式。即便是观察操作情况的方式,也难以轻易分辨。

由于单靠 CAPTCHA 进行防御存在极限,现实的做法是组合多层防御,例如 WAF 的速率限制、设备认证以及通行密钥身份验证。此外,无需出示 CAPTCHA 的方向也在推进标准化,用令牌证明设备或账户正当性的机制 (Privacy Pass) 已于 2024 年 6 月作为 RFC 9576 公开。CAPTCHA 的角色正在从「完全排除机器人」的工具,转变为「提高机器人成本」的工具。

常见误解

部署 CAPTCHA 就能完全阻止机器人
由于存在 CAPTCHA 破解服务和 AI 绕过技术,没有任何 CAPTCHA 能 100% 阻止机器人。CAPTCHA 提高了自动化攻击的成本,但必须与速率限制、IP 信誉检查和 WAF 规则配合使用才能实现有效防御。
图片 CAPTCHA 只有一个明确的正确答案
reCAPTCHA v2 的图片挑战中混杂着「明确的正确答案」和「灰色地带」的图片。比如是否应该选择只拍到红绿灯灯杆的图片,连人类的判断也会出现分歧,边界图片的选法稍有不同也可能通过验证。至于把哪些范围视为正确答案,官方并未公开。
CAPTCHA 只在可疑流量时才会出现
触发挑战的条件并未公开,机器人嫌疑也不是唯一条件。实际上,通过 VPN 或代理访问,或者从平时不用的环境访问,也可能出现验证,合法用户反复被要求完成 CAPTCHA 并不罕见。
分享

相关术语

相关文章