返回博客
技术 发布于 27.08.2026 阅读约 1 分钟

CAPTCHA 在那里,却没有任何保护

可见的 reCAPTCHA、hCaptcha 或 Turnstile 小组件,并不能充分说明表单是否受保护。本文介绍典型配置错误,以及如何在几分钟内检查自己的表单。

许多网站所有者为联系表单添加 CAPTCHA,看到小徽章或复选框出现,就认为垃圾信息问题已经解决。然而垃圾仍持续到来。通常 CAPTCHA 本身没有问题——它只是没有连接到任何能阻止机器人的机制。本文说明 reCAPTCHA、hCaptcha 和 Cloudflare Turnstile 如何常常沦为摆设,以及如何检查自己的表单。

防护实际发生在哪里

这三种服务原理相同。浏览器中的脚本执行检查,并向表单提供令牌——一个表示“此访客已通过”的短字符串。令牌随表单提交到您的服务器。真正的决定仅在那里发生:服务器将令牌连同服务端密钥发送给提供商,并收到答复——成功或失败,reCAPTCHA v3 还会返回评分。链条中任何一环缺失,小组件看起来仍可能完全正常,但直接向表单处理程序提交的机器人会畅通无阻。

CAPTCHA 依赖的链条
1脚本加载
提供商脚本已加载,并获准在表单页面运行。
2签发令牌
浏览器收到只能使用一次的短期令牌。
3提交令牌
令牌随表单字段一同发送到服务器。
4服务器验证
您的服务器使用服务端密钥向提供商检查令牌。
5服务器决定
除非答复为通过(对于 v3,评分还须足够高),否则拒绝提交。
只有每一步都有效,才有保护——决定性步骤发生在看不见的服务器上。

放行一切的测试密钥

Google、hCaptcha 和 Cloudflare 发布专用测试密钥,使开发者无需解谜即可运行自动测试。配合对应测试服务端密钥,验证总会成功——这正是其用途。它们用于本地和预发布环境,却经常在迁移生产环境时被保留:开发者构建时粘贴进去,网站上线,却没人替换。reCAPTCHA 至少会在小组件中提示仅供测试,但不可见配置下几乎无人查看。如果测试站点密钥和测试服务端密钥均用于线上,每次提交都通过,无论来自真人还是机器人;如果仅站点密钥为测试密钥,验证反而会失败,真实消息可能被拒绝。

无人检查的令牌

第二种典型情况是服务器从不向提供商查询。小组件运行、令牌生成并提交,表单处理程序却直接忽略。常见于手写表单、仅涵盖浏览器端的复制代码片段,以及未完成的插件设置。类似情况是:服务器确实调用验证服务,却只检查请求是否成功发出,不检查答复内容。或者将 reCAPTCHA v3 评分阈值设为 0,接受服务可能返回的任何评分。有些处理程序还会“故障时放行”:令牌缺失或验证失败,仍接受消息——机器人只需省略令牌。

小组件从未真正加载时

其他配置错误则破坏浏览器端。如果站点密钥未注册该域名——常见于从预发布迁到生产、变更域名或新增子域名后——提供商拒绝签发令牌,并在小组件或浏览器控制台显示错误。切换主题或更新插件后,页面可能仍有小组件标记,但使其运行的脚本已消失。如果 Cookie 同意工具在访客同意前阻止 CAPTCHA 脚本,也会有相同效果。之后取决于服务器:若坚持有效令牌,真实访客将无法发送消息,却无人察觉咨询丢失;若不坚持,机器人便可自由通过。

还有两种情况容易忽略。对于 reCAPTCHA v3,角落徽章仅表明页面某处加载了脚本——可能由主题或其他插件加载——而表单插件自身的集成已关闭。此外,缓存插件可能连同 HTML 中嵌入的令牌一起缓存页面。CAPTCHA 令牌仅有效几分钟,且只能验证一次,因此缓存令牌对真实访客会失败;诱人的“修复”方式是关闭检查,却会悄悄移除防护。

表象与实际
您看到的情况
  • 小组件显示“仅供测试”提示
  • v3 徽章显示在角落
  • 小组件显示并返回令牌
  • 垃圾信息停止了,真实咨询也停止了
可能的实际情况
  • 使用公开测试密钥,每次验证均成功
  • 表单插件的 reCAPTCHA 集成已关闭
  • 服务器从不发送令牌进行验证,或忽略结果
  • 站点密钥未注册该域名,或缓存令牌已过期

简短自查

  1. 1在隐私窗口中打开表单页面,打开浏览器开发者工具,检查控制台是否有 CAPTCHA 脚本错误。
  2. 2确认小组件确实出现——接受 Cookie 横幅前后各检查一次——并确认缺少小组件时无法发送表单。
  3. 3在提供商管理控制台确认站点密钥包含您的线上域名(包括 www 等变体),并确认表单插件或代码中的密钥与之匹配,而非文档或预发布设置中的密钥。
  4. 4在表单插件设置中确认此特定表单已启用 CAPTCHA 集成;对于 reCAPTCHA v3,确认评分阈值大于 0。
  5. 5如果可访问代码,请找到服务器端验证,确认答复为否或令牌缺失时会拒绝提交。
  6. 6将表单页面排除在整页缓存之外,或确保浏览器新生成令牌。
  7. 7发送真实测试消息并确认到达;变更主题、插件或同意工具后重复检查。
外部检查能看到和不能看到什么
测试密钥、没有脚本的小组件标记、控制台错误和被阻止脚本均可从外部发现——formexposed.com 的免费检查正是寻找这些信号,不提交任何内容。服务器是否真正验证令牌,无法从页面看出;只能通过服务器代码或真实提交确认。

CAPTCHA 是一层,而非全部防护。与蜜罐字段、时间检查和服务器端过滤组合后,某处配置错误不至于使表单完全敞开。如果您想快速了解表单状况,请在 formexposed.com 输入域名——报告会显示 CAPTCHA 设置中外部可见部分是否正常。