我热衷于使用ReCaptcha v3进行登录和登录,但我不确定如何处理“低评分”,拒绝访问没有安全感,用户无法前进。感觉更完整的解决方案是,如果分数太低,则将v3的“评分”与v2的难题挑战相结合。其他人如何处理这个问题?
另外,似乎v3的grecaptcha.execute
返回的结果与v2类似,也就是说它没有返回评级,只是TOKEN
得到了与v2相似的验证?< / p>
我发现我的代码演示了它们都可以在同一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调用来完成,但是感觉就像可以由bot检查和操纵的东西(抓住ajax响应,将“ no”更改为“ yes”,然后让bot本身调用“ callback”函数)获得访问权限)
任何帮助或建议将不胜感激。
答案 0 :(得分:1)
仅通过表单发布发送令牌并仔细检查服务器端是否最简单?我知道您仍然可能允许漫游器将数据发布到系统中,但是可以被Google偷偷摸摸的漫游器应该很少见。服务器端逻辑应该做的第一件事就是验证令牌,该令牌不容易被伪造。就是说,在我对google V3(10K请求)的初步分析中,僵尸程序检测完全是二进制的,因为所有得分都高于或低于.5。 Google在其文档中针对这种情况建议了不同的策略来处理可疑流量。
答案 1 :(得分:0)
reCAPTCHA 的官方常见问题网站上似乎有此问题的答案。
Can I run reCAPTCHA v2 and v3 on the same page?
为此,请将 v3 站点密钥加载为documented,然后使用
grecaptcha.render
显式渲染 v2 。
<html>
<head>
<title>reCAPTCHA demo: Running both v2 and v3</title>
<script src="https://www.google.com/recaptcha/api.js?render=v3_site_key"></script>
<script>
grecaptcha.ready(() => {
grecaptcha.render('html_element', {
'sitekey' : 'v2_site_key'
});
});
</script>
<script>
function onSubmit() {
grecaptcha.ready(() => {
grecaptcha.execute('v3_site_key', {action: 'homepage'}).then((token) => {
...
});
});
}
</script>
</head>
</html>