Recaptcha v2验证

时间:2019-03-18 20:21:02

标签: php recaptcha brute-force

我正在尝试使用Recaptcha v2防御蛮力。我已经重新设置了所有的代码,并且可以正常工作,以便用户每次登录时都需要进行验证。但是,当尝试使用自动蛮力攻击时,攻击仍然成功。我知道这是因为他们可以使用首次登录时的原始Recaptcha响应,并且每次都可以使用它。 所以我要问的是我该如何做,以便每次都需要匹配新的验证?验证码过期时可能会收到响应??这是我的html代码:

<div class="g-recaptcha" data-sitekey="6LdRT5QUAAAAAD_BucIv7sDUhLE7iVtHRUR9LyhM"></div>
              <br/>

PHP:

     $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");
        }

}

谢谢。

1 个答案:

答案 0 :(得分:0)

您的代码有两件事。

1。您每次加载都需要一个新令牌

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

  

每个reCAPTCHA用户响应令牌只能验证一次。如果需要新令牌,则需要调用grecaptcha.reset()来要求最终用户再次使用reCAPTCHA进行验证。

     

grecaptcha.reset(   opt_widget_id   )重置reCAPTCHA小部件。   opt_widget_id     可选的小部件ID,如果未指定,默认为创建的第一个小部件。

<script type="text/javascript">
  $(document).ready(function() {
    grecaptcha.reset();
  });
</script>

2。您不是在验证reCAPTCHA响应

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

  

方法:开机自检

     

POST参数说明   
秘密是必需的。您的站点和reCAPTCHA之间的共享密钥。   
回复为必需。您网站上的reCAPTCHA客户端集成提供的用户响应令牌。   
远程是可选的。用户的IP地址。

当您将2-3篇文章发布到网站时,您将获得一个JSON对象。在该对象中,它将具有键“成功”。如果是这样,那么它们将被验证。

“成功”应该在您的PHP if语句中。

来源:API-Request JS-API Verifying-Response