我正在尝试使用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.每次加载都需要一个新令牌
您可以在每次加载页面时通过调用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
POST参数说明 秘密必需。您网站与reCAPTCHA之间的共享密钥。 响应必填。您网站上reCAPTCHA客户端集成提供的用户响应令牌。 remoteip可选。用户的IP地址。
当您将2-3个帖子发布到网站时,您将获得一个JSON对象。在那个对象中,它将拥有关键的“成功”。如果确实如此,则验证它们。
'success'应该在PHP if语句中。