我热衷于使用 reCAPTCHA v3 进行登录和其他内容,但我不确定如何处理“低评级”,拒绝访问而用户无法继续前进是不安全的。如果分数太低,感觉更完整的解决方案是将 v3 的“评级”与 v2 的拼图挑战结合起来。其他人如何处理这个问题?
此外,似乎 v3 的 grecaptcha.execute
返回与 v2 类似的结果,也就是说它不返回评级,只是返回 TOKEN
哪个以类似于 v2 的方式验证?
我找到了一些代码来证明它们都可以在同一个 HTML 中使用...
<!-- https://github.com/google/recaptcha/issues/279 -->
<script src="https://www.google.com/recaptcha/api.js?onload=v2_onload"></script>
<script src="https://www.google.com/recaptcha/api.js?onload=v3_onload&render=V3_SITE_KEY"></script>
<script src='https://www.google.com/recaptcha/api.js?render=V3_SITE_KEY'></script>
<div class="g-recaptcha" data-size="invisible" data-sitekey="V2_SITE_KEY" data-callback="v2_callback"></div>
<script type="text/javascript">
function v2_onload() { console.log('v2 loaded'); }
function v3_onload() { console.log('v3 loaded'); }
function v2_callback(token) { console.log('v2 token: ' + token); }
function v3_callback(token, score) { console.log('v3 token: ' + token + " ----- " + score); }
// call these manually
function test_v2() { grecaptcha.execute(); }
function test_v3() {
grecaptcha.execute('V3_SITE_KEY' , {action:'thisIsATest' }).then(v3_callback);
}
我担心如果 v3 需要服务器端验证,为了实现 v2,要么重新加载页面以调用 v2(当服务器端说“低评级”然后重新加载并启用 v2)或 v3 服务器端验证可以通过 ajax 调用完成,但这感觉就像机器人可以检查和操纵的东西(获取 ajax 响应,将“否”更改为"is",然后让机器人自己调用“回调”函数以获取访问权限)。
任何帮助或建议将不胜感激。
最佳答案
将 token 与您的表单发布一起发送并在服务器端仔细检查它不是最简单的吗?我知道您仍然可能允许机器人将数据发布到您的系统中,但是可以被 google 偷偷摸摸的机器人应该非常罕见。您的服务器端逻辑应该做的第一件事是验证 token ,这不容易伪造。也就是说,在我对 google V3(10K 请求)的初步分析中,bot 检测是完全二进制的,因为所有分数都高于或低于 0.5 。谷歌在他们的文档中推荐了不同的策略来根据场景处理可疑流量。
关于recaptcha - 结合 reCAPTCHA v2 和 v3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54215482/