Recaptcha v2 验证

Recaptcha v2 verification

我正在尝试使用 Recaptcha v2 来抵御暴力破解。我已经设置好 recaptcha 并正常工作,这样用户每次登录时都需要验证。然而,当尝试自动暴力破解时,攻击仍然成功。我知道这是因为他们可以使用第一次登录时的原始 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.每次加载都需要一个新令牌

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

Each reCAPTCHA user response token can only be verified once. If you need a new token, you will need to call grecaptcha.reset() to ask the end user to verify with reCAPTCHA again.

grecaptcha.reset( opt_widget_id ) Resets the reCAPTCHA widget. opt_widget_id Optional widget ID, defaults to the first widget created if unspecified.

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

2。您没有验证 reCAPTCHA 响应

您需要POST以下信息:https://www.google.com/recaptcha/api/siteverify

METHOD: POST

POST Parameter Description
secret Required. The shared key between your site and reCAPTCHA.
response Required. The user response token provided by the reCAPTCHA client-side integration on your site.
remoteip Optional. The user's IP address.

当您 post 到网站的 2-3 件时,您将得到一个 JSON 对象返回。在该对象中,它将具有键 'success'。如果这是真的,那么它们就被验证了。

'success' 应该在您的 PHP if 语句中。

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