编程语言
首页 > 编程语言> > javascript – 从谷歌reCaptcha v2中删除手动挑战

javascript – 从谷歌reCaptcha v2中删除手动挑战

作者:互联网

与以前的迭代相比,v2 reCaptcha有了一些显着的改进.当第一次实现(使用PHP验证顺便说一句)时,我的用户询问的是检查一个框.然后在几个表单提交之后,它要求用户识别一些图像,然后在几个表单提交之后它要求用户验证多个图像挑战.

有谁知道在google recaptcha API中完全关闭/禁用手动图像质询的方法?即我希望他们只检查JS复选框 – 就像表格完成的前几次一样.

我知道它有点挫败了目的,但是我准备处理一些垃圾邮件,如果交易更​​好的用户体验.

我试过了:

>通过添加https://www.google.com/recaptcha/api.js?manual_challenge=false来关闭js(从一些旧的API设置中挖出一行)
> https://www.google.com/recaptcha/api.js?fallback=false(替代’true’只是强制非JS版本)
> https://www.google.com/recaptcha/api.js?data-type=none(根据他们的display options在黑暗中拍摄)

我假设谷歌监控实施并智能地更改UI.在我的实例中,来自同一IP地址的许多请求看起来像机器人,因此需要更好的验证.但是,它只是一个用户重新提交相同的表单多次.我想做的是覆盖它以始终使用最低安全性.

解决方法:

谷歌的reCaptcha假设每次你挑战某人,你怀疑他们是一个机器人,所以如果他们已经通过挑战,下一个挑战将变得越来越难.

因此,只有当您认为他们可能是机器人时才会向某人提出质疑,例如他们第一次提交表单,或者他们未对您的网站进行身份验证.一旦Google告诉您用户是安全的,除非/您有理由再次怀疑该用户,否则请相信他们.

PHP $_SESSION超全局可能是您最好的选择,但与所有会话一样,请确保您遵循最佳实践(会话名称指纹识别,令牌熵,会话固定攻击,混合不安全和TLS会话等)

我处理它的方式是,当用户首次成功通过CAPTCHA挑战时,不要再次挑战它们.

以下示例基于Google在其示例中提供的代码:https://github.com/google/recaptcha/blob/master/examples/example-captcha.php

<?php
if (empty($_SESSION['isCaptchaVerified'])) {
    $recaptcha = new \ReCaptcha\ReCaptcha($secret);
    $resp = $recaptcha->verify($gRecaptchaResponse, $remoteIp);
    if ($resp->isSuccess()) {
        // verified!
        $_SESSION['isCaptchaVerified'] = true;
    } else {
        $errors = $resp->getErrorCodes();
    }
}
...
?>
<form action="/" method="post">
    ...
    <?php if (empty($_SESSION['isCaptchaVerified'])) { ?>
        <script type="text/javascript"
            src="https://www.google.com/recaptcha/api.js?hl=<?php echo $lang; ?>">
        </script>
    <?php } ?>
</form>

这将:

>检查用户之前是否通过了挑战
>如果$_SESSION [‘isCaptchaVerified’]未设置或为false,则提出挑战
>如果$_SESSION [‘isCaptchaVerified’]是完整的,那就不会有任何挑战

(在这种情况下,请参阅PHP manual entry on empty(),了解什么是真实和虚假).

标签:javascript,php,recaptcha
来源: https://codeday.me/bug/20190829/1762863.html