纯html无法实现真正可用的captcha;recaptcha和hcaptcha必须前后端配合,关键验证逻辑必须落在服务端,否则token可被伪造、重放或跳过。

直接上结论:纯 HTML 无法实现真正可用的 CAPTCHA,所有“只改 HTML”就声称能防机器人的做法都不可靠;reCAPTCHA 和 hCaptcha 必须前后端配合,且关键验证逻辑必须落在服务端 —— 否则 token 可被伪造、请求可被重放、校验可被跳过。
reCAPTCHA v2 的 g-recaptcha-response 怎么提交和校验
前端不是把 div 往表单里一塞就完事。用户勾选“我不是机器人”后,Google JS 会自动在表单提交前注入一个隐藏字段 <input type="hidden" name="g-recaptcha-response" value="xxx">,但这个值只在当前页面生命周期内有效,且 2 分钟后过期。
- 必须确保
<script src="https://www.google.com/recaptcha/api.js"></script>加载成功,否则g-recaptcha-response字段为空 —— 常见于国内网络未配置代理或未启用 DNS over HTTPS - 后端收到请求后,必须立即用
secret(私钥)向https://www.google.com/recaptcha/api/siteverify发起 POST 请求,传入response(即g-recaptcha-response值)和remoteip(客户端真实 IP) - 返回 JSON 中
success: true仅表示 token 格式合法且未过期,还需检查score字段(v2 固定为 0.9,v3 才有浮动分) - 若后端校验逻辑写成“只要
success === true就放行”,等于没加验证码 —— 攻击者可抓包复用一次有效 token 批量提交
hCaptcha 的 h-captcha-response 为什么比 reCAPTCHA 更难绕过
hCaptcha 默认启用更严格的域名校验和 referrer 检查,且其 token 签名机制包含时间戳与客户端指纹混合哈希,重放窗口比 reCAPTCHA 更窄(通常 ≤ 120 秒)。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 前端需引入
<script src="https://hcaptcha.com/1/api.js"></script>,并在表单中添加<div class="h-captcha" data-sitekey="YOUR_SITEKEY"></div> - 提交时同样携带
h-captcha-response字段,后端调用https://hcaptcha.com/siteverify,参数为response、secret和sitekey - 注意:hCaptcha 返回的
success是布尔值,不是字符串;而challenge_ts字段可用于判断 token 是否过旧(建议拒绝 > 90 秒的请求) - 如果后端漏传
sitekey或secret错位(比如把 sitekey 当 secret 用),API 会返回{"success":false,"error-codes":["bad-request"]},但很多开发者只判 success 却忽略 error-codes
为什么不能把验证码校验逻辑放在前端 JavaScript 里
因为所有前端代码都可被查看、调试、篡改。哪怕你用 WebAssembly 或混淆 JS,攻击者只需禁用 JS 或用 Puppeteer 直接 patch grecaptcha.execute() 返回固定值,就能绕过全部验证。
- 常见错误:在前端写
if (token && token.length > 100) { submitForm() }—— 这只是长度校验,不是人类校验 - 更危险的做法:把 secret key 硬编码进前端 JS,再用 fetch 调用 Google 接口 —— 导致密钥泄露,他人可拿它批量验证任意 token
- 蜜罐字段(如隐藏 input)、时间戳、IP 限频等辅助手段,只能作为补充,不能替代服务端 token 校验
- 真正安全的边界只有一个:后端收到表单后,必须发起一次独立的、带密钥的、不可缓存的第三方 API 请求,并严格依据返回结果决定是否继续处理业务逻辑
最容易被忽略的点是 token 的一次性与时效性 —— 同一个 g-recaptcha-response 或 h-captcha-response 值,服务端最多接受一次校验,且必须在生成后 2 分钟内完成。超时或重复使用,就等于把锁换成一张贴纸。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










