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 语句中。
我正在尝试使用 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 语句中。