ReCaptcha V3 - 如果验证失败怎么办?

Posted

技术标签:

【中文标题】ReCaptcha V3 - 如果验证失败怎么办?【英文标题】:ReCaptcha V3 - what to do if validation failed? 【发布时间】:2021-12-22 04:57:23 【问题描述】:

我已将不可见的 reCaptcha V3 添加到 asp.net core 6.0 Angular SPA。

    注册 MVC 页面 html
  . . .
  <input type="hidden" name="captcha" id="captchaInput" value="" />
</form>

. . .

@section Scripts 
    <script src="https://www.google.com/recaptcha/api.js?render=@Configuration["Recaptcha:siteKey"]"></script>
    <script>
        grecaptcha.ready(function() 
            grecaptcha.execute('@Configuration["Recaptcha:siteKey"]',  action: 'contact' ).then(function (token) 
                $("#captchaInput").val(token);
            );
        );
    </script>

    <partial name="_ValidationScriptsPartial" />

CS

if (ModelState.IsValid)

  if (!await _captchaValidator.IsCaptchaPassedAsync(captcha))
    ModelState.AddModelError("captcha", "Captcha validation failed");

有注入 reCaptcha 验证器的 OIDC 控制器。

一切正常。直到验证失败(例如低分)。

用户无法从这里继续前进。

我希望验证码会成为常见的可见挑战。

我需要一个可行的解决方案 - 如果 reCaptcha v3 验证失败(无论出于何种原因),如何给用户第二次机会证明他们不是机器人。

感谢:https://github.com/Jarda29/GoogleReCaptcha.V3

【问题讨论】:

为什么要给机器人第二次机会?他们是该死的肮脏机器人。如果您坚持认为这样的可疑用户不是机器人,您总是可以退回到验证码 v2,或者不只是给您分数,但需要某种交互性的替代方案,例如“点击所有飞机”或“单击所有看起来像停车收费表的停车收费表和邮箱”。如果你有一个定制的想法,我会挑战你想出一些方法,让某人在实现它之前可以编写脚本,因为他们可能可以。 我知道这一切,但只是为了澄清一下——当我测试时,我不知何故达到了 0.45——而且我不是机器人。我确实显示错误消息,但验证码在“注册”页面上。如果一个人撞到这堵墙 - 没有出路。我想捕获每个合法用户。我不关心围绕它编写脚本。它不是网上银行或任何东西。如果您知道如何混合 v3 和 v2 - 请考虑发布答案。谢谢 【参考方案1】:

想想,这里有几个问题。

    我应该使用哪个 reCaptcha 版本(V2、V3)? 如何设置验证码? 如果 reCaptcha 失败,后端应该返回什么?

所以,...

    根据您自己和您的项目选择。恕我直言,核心优点和缺点是

对于 V2:只允许人类(仅非编程点击有效),检查是不可避免的,有时很难;

对于V3:不仅人类可以通过它,而且它也不烦人。 这两个选项都有效。只需为您的项目选择最好的。并配置 V3(如果被选中)。

    设置。 V2 没有设置,因为由于其性质,它仅适用于人类。V3 对评估用户操作的每个请求都有一个score。太低的分数在success 中给出falsetruefalse 的限制值应设置为 https://g.co/recaptcha/admin/。这不需要代码/配置更新。否则,您可以通过Task&lt;JObject&gt; GetCaptchaResultDataAsync(string token) 获取整个响应对象,并自行处理对象的score 值。在这种情况下,应手动更改限制值(代码或配置)。

注意!在您的站点工作期间,该值可能会发生变化!这取决于用户的行为、他们的 I-net 速度、软件……

注意!初始 gReCaptcha V3 得分值为0.5。你可以在控制台上玩它。

    如果 reCaptcha 失败,那么它主要是机器人。所以不需要实际操作。所以它可能是一个忽略动作 - 根本没有响应动作。让机器人无休止地撞墙。特别是在 V2。如果 V3 正在使用中,那么您可以假设它可能是用户。您可以从后端返回错误消息或 4XX 代码。在前端,可能会有触发用户通知的响应处理——关于可疑行为的错误文本。

P。 S. 对于 QA 来说,实施passway 以避免 reCaptcha 检查是有必要的。不同的构建/配置(QA 手册)或端点/附加密码(QA 自动)覆盖或跳过 await _captchaValidator.IsCaptchaPassedAsync(captcha) 结果。

【讨论】:

感谢您的长回答。只是为了澄清-当我测试时,我以某种方式达到了0.45-而且我不是机器人。我确实显示错误消息,但验证码在“注册”页面上。如果一个人撞到这堵墙 - 没有出路。那时我想有完整的验证码挑战。可以用v3完成吗?如果不是,我应该使用 v3 的混合来获得分数,如果分数很低 - 拨打 v2 电话 - 如果是 - 怎么做? BoppityBop,没关系,在测试时你可以得到一个奇怪的分数。您正在测试,不要阅读页面上的任何内容,直接快速点击,......它可能看起来像机器人行为。 ;) 这就是我写“NB!”的原因。一个站点的分数是单一的。如果您的网站速度很快,内容最少,那么所有分数都会很低,gReCaptcha V3 分数也应该降低。或者,如果您的登录速度很快,则需要进行自定义分数处理(#2)。无论如何,V3 分数是您的机器人保护。与用户保护方式相同。你必须找到它的平衡值。 谢谢,但我仍然想回答我的问题:“如果 reCaptcha v3 验证失败(无论出于何种原因我选择失败),用户如何证明他们不是机器人” - 做我切换到v2?如果是,那么如何。这就是我需要知道的全部内容(请参阅问题下的其他评论 - 我有我的理由)。 我编辑了问题的最后一行 @BoppityBop,V3 没有明确的挑战——它是 V2。想想,您可以在这两种服务上注册您的网站。我没有遇到他们的组合。恕我直言,只需选择一个并全力以赴。但是如果你真的想要V3 + V2,那么你需要V2注册,前端实现,条件渲染(如果后端响应失败),另一个端点请求(它将检查V2结果), ... 如果您只写几行代码来演示从 v3 切换到 v2 的想法,那真的很有帮助。它也会更快,而不是写一堆带有一般想法的 cmets。我需要根据问题文本将代码添加到if (!await _captchaValidator.IsCaptchaPassedAsync(captcha))。 JS for V2 也将不胜感激..

以上是关于ReCaptcha V3 - 如果验证失败怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

如何在服务器端验证 Google reCAPTCHA v3?

验证码 v3 问题

Google 的 reCAPTCHA v3 的工作原理

Recaptcha V3 错误错误-captcha-sol 随机

Spring Boot 下使用谷歌 reCAPTCHA v3

带有 reCAPTCHA v3 的角反应形式