结合 reCAPTCHA v2 和 v3

Nin*_*oel 5 recaptcha

我热衷于使用 reCAPTCHA v3 进行登录和其他内容,但我不确定如何处理“低评级”,拒绝访问而用户无法继续前进是不安全的。如果分数太低,感觉更完整的解决方案是将 v3 的“评级”与 v2 的拼图挑战结合起来。其他人如何处理这个问题?

此外,似乎 v3grecaptcha.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); 
}
Run Code Online (Sandbox Code Playgroud)

我担心如果 v3 需要服务器端验证,为了实现 v2,要么重新加载页面以调用 v2(当服务器端说“低评级”然后重新加载并启用 v2)或 v3 服务器端验证可以通过 ajax 调用完成,但这感觉就像机器人可以检查和操纵的东西(获取 ajax 响应,将“否”更改为“是”,然后让机器人自己调用“回调”函数以获取访问权限)。

任何帮助或建议将不胜感激。

sim*_*eco 5

reCAPTCHA官方常见问题网站上似乎有这个问题的答案。

我可以在同一页面上运行reCAPTCHA v2v3吗?

为此,请按照文档加载v3站点密钥,然后使用显式呈现v2grecaptcha.render

<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>
Run Code Online (Sandbox Code Playgroud)


Agi*_*oob 3

将令牌与表单一起发送并在服务器端仔细检查不是最简单的吗?我知道您仍然可能允许机器人将数据发布到您的系统中,但可以通过 Google 偷偷溜走的机器人应该很少见。服务器端逻辑应该做的第一件事是验证令牌,该令牌不容易被伪造。也就是说,在我对 google V3(10K 请求)的初步分析中,机器人检测完全是二进制的,因为所有分数都高于或低于 0.5 。谷歌在其文档中建议了如何根据场景处理可疑流量的不同策略。

https://developers.google.com/recaptcha/docs/v3

  • 我选择了 v2 的“隐形”选项。它决定是否认为你是机器人,如果是,它会显示一个带有挑战谜题的弹出窗口。如果你是人类,你很有可能根本不会受到挑战。https://developers.google.com/recaptcha/docs/invisible @bishal (3认同)