首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Recaptcha v2验证

Recaptcha v2验证
EN

Stack Overflow用户
提问于 2019-03-18 20:21:02
回答 1查看 3.1K关注 0票数 0

我正在尝试使用Recaptcha v2来抵御野蛮的力量。我已经让recaptcha所有的设置和工作,以便用户需要验证,每次他们登录。然而,当试图使用自动化的蛮力时,攻击仍然是成功的。我知道这是因为他们可以在第一次登录时使用原始的recaptcha响应,并且每次都使用。因此,我想问的是,我怎样才能做到这一点,这样每次都需要与新的核查相匹配?也许在验证码到期后会得到回应??以下是我的html代码:

代码语言:javascript
运行
复制
<div class="g-recaptcha" data-sitekey="6LdRT5QUAAAAAD_BucIv7sDUhLE7iVtHRUR9LyhM"></div>
              <br/>

PHP:

代码语言:javascript
运行
复制
     $secret = 'my secret';
        $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
        $responseData = json_decode($verifyResponse);

    echo $responseData;

        if($responseData->success)

    {



            if ($state->num_rows == 1)

     {
        $row[]=array($firstName, $lastName);    
        echo json_encode($state);
        $_SESSION['uName'] = $uName;

     }
            else {
                echo ("false");
        }


 } 
    else {
                echo ("false");
        }

}

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-18 20:43:53

代码有两处问题.

1.在每个负载上都需要一个新的令牌

您可以通过每次加载页面时调用reCAPTCHA API来刷新reCAPTCHA。

每个reCAPTCHA用户响应令牌只能验证一次。如果您需要一个新的令牌,则需要调用grecaptcha.reset()来再次要求最终用户使用reCAPTCHA进行验证。 grecaptcha.reset( opt_widget_id )重置reCAPTCHA小部件。opt_widget_id可选小部件ID,默认为在未指定的情况下创建的第一个部件。

代码语言:javascript
运行
复制
<script type="text/javascript">
  $(document).ready(function() {
    grecaptcha.reset();
  });
</script>

2.您没有验证reCAPTCHA响应

您需要将以下信息发布到:https://www.google.com/recaptcha/api/siteverify

方法:员额 后参数Descriptionsecret要求。站点和reCAPTCHA.response之间的共享密钥是必需的。site.remoteip上的reCAPTCHA客户端集成提供的用户响应令牌。用户的IP地址。

当您将2-3个片段发布到网站时,您将得到一个JSON对象。在这个目标上,它将有一个关键,“成功”。如果这是正确的,那么它们将被验证。

“成功”应该出现在PHP语句中。

资料来源:API-请求 JS-API 核查-反应

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55229469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档