Codeigniter集成Google reCAPTCHA V2服务端验证被机器人绕过求助
reCAPTCHA V2表单防护失效排查与优化方案
现有配置的潜在问题排查
你的代码逻辑本身没有明显缺陷,服务端校验逻辑是生效的,先排查以下几点:
- 确认所有表单提交入口都加载了这套验证规则:检查是否存在未下线的旧版提交接口、旁路的AJAX提交路径没有加验证码校验,垃圾请求很可能是走了未防护的入口
- 如果你的站点部署了CDN、反向代理或WAF,确认你拿到的是用户真实IP:
$_SERVER['REMOTE_ADDR']在有代理的情况下拿到的是代理节点的IP,reCAPTCHA校验的时候用代理IP不会直接导致校验失败,但会影响风险判定的准确性,你需要根据你的代理配置从X-Forwarded-For等头中获取真实用户IP传入verify方法 - 登录Google reCAPTCHA管理后台检查安全等级配置:默认的低安全等级会放过很多被判定为低风险的请求,你可以将安全等级调整为最高,再观察垃圾提交量的变化
- 增加验证日志排查:建议在
recaptcha_validation方法中增加日志,记录每次请求的IP、g-recaptcha-response值、验证结果、错误码,确认垃圾提交是否真的通过了reCAPTCHA的官方校验,排除其他业务逻辑跳过验证的可能
为什么reCAPTCHA V2会失效
2021年之后reCAPTCHA V2已经存在大量成熟的绕过方案:包括AI图像识别自动过图片验证、低成本人工打码平台、主流爬虫框架自带的过验证插件,普通的V2校验已经很难挡住定向的垃圾提交攻击。
优化方案建议
- 优先新增蜜罐校验:成本极低,防护效果明显。在表单中新增一个对普通用户隐藏的输入框(用CSS设置
display: none,字段名可以设为url、remark这类看似正常的名称),服务端增加校验规则:只要该字段有值,直接判定为机器人拒绝提交。绝大多数通用爬虫会自动填充所有表单字段,该规则可以挡住80%以上的非定向垃圾提交。 - 升级到reCAPTCHA V3:V3采用无交互的行为评分机制,会根据用户的页面行为给出0-1的风险评分,你可以自定义阈值(比如0.5以下直接拒绝,0.5-0.7之间弹出V2二次校验),防护能力远高于V2,同时不会影响正常用户的操作体验。
- 叠加轻量化的辅助校验规则:
- 限制同一IP单位时间内的提交次数,比如10分钟内最多提交3次
- 增加表单提交最短时间校验:如果表单页面加载完成后1秒内就收到提交请求,直接判定为机器人
- 校验请求的Referer头,确认请求来源是你的站点域名
以上规则组合使用可以挡住95%以上的垃圾提交请求。
内容的提问来源于stack exchange,提问作者Wenzz
相关产品推荐
相关产品推荐

