Google reCAPTCHA V2 JavaScript我们检测到您的网站未在验证reCAPTCHA解决方案

jei*_*da 4 javascript php ajax recaptcha invisible-recaptcha

错误消息 我们检测到您的站点未在验证reCAPTCHA解决方案。这是在您的站点上正确使用reCAPTCHA所必需的。请访问我们的开发者网站以获取更多信息。 我创建了这个reCaptcha代码,效果很好,但是我不知道如何验证它,我以为它正在使用该函数进行验证, grecaptcha.getResponse();但事实并非如此。显然,recaptcha在网站上运作良好,但我刚刚在Google管理员中看到了下一条消息: 在此处输入图片说明

要求: 1.不要action="file.php"在表单中使用,仅在表单中使用javascript函数。

     <!DOCTYPE>
<html>
<head >
    <title></title>
    <script src='https://www.google.com/recaptcha/api.js'></script>
    <script type="text/javascript">
        function get_action() {
            var v = grecaptcha.getResponse();
            console.log("Resp" + v );
            if (v == '') {
                document.getElementById('captcha').innerHTML = "You can't leave Captcha Code empty";
                return false;
            }
            else {
                document.getElementById('captcha').innerHTML = "Captcha completed";
                return true;
            }
        }
    </script>
</head>
<body>
    <form id="form1" onsubmit="return get_action();">
    <div>
    <div class="g-recaptcha" data-sitekey="6LdNIlAUAAAAADS_uVMUayu5Z8C0tw_jspdntbYl"></div>
    </div>
   <input type="submit" value="Button" />
   
    <div id="captcha"></div>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

请你帮我一下。我将不胜感激,如何验证它,因为我需要使用javascript函数onsubmit="return get_action();"而不是action="file.php"*提交时:

The*_*nnY 5

grecaptcha.getResponse()功能只会为您提供用户响应令牌,然后必须通过HTTP POST在Google reCAPTCHA服务器上调用进行验证。

您可以使用AJAX请求来验证令牌,但是出于安全原因,这些验证应该始终在服务器端进行-JavaScript始终被用户所采用,并被诱使相信reCAPTCHA已成功验证。

Google reCAPTCHA文档

获取响应令牌后,您需要使用以下API使用reCAPTCHA对其进行验证,以确保该令牌有效。

因此,您需要做的是grecaptcha.getResponse()按照reCAPTCHA docs中的说明,将reCAPTCHA机密(在reCAPTCHA管理页面中为您生成的第二个密钥)和用户响应令牌(从函数接收到的密钥)发送到reCAPTCHA API 。

在PHP中,您将需要执行以下操作:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
    'secret'   => YOUR_RECAPTCHA_SECRET,
    'response' => USER_RESPONSE_TOKEN,
]));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$data = curl_exec($ch);

curl_close($ch);

$response = @json_decode($data);

if ($response && $response->success)
{
    // validation succeeded, user input is correct
}
else
{
    // response is invalid for some reason
    // you can find more in $data->{"error-codes"}
}
Run Code Online (Sandbox Code Playgroud)

  • 我在服务器端执行此操作,但收到相同的警告。该警告没有提供有关未经验证的响应的任何信息。甚至没有请求的数量和最后一次请求的日期。据我所知,这可能是 5 年前未经验证的回复发出的警告。管理控制台中有一个地方可以获取详细信息吗?如果 Google 的任何人都在倾听,那么你的 API 和文档就是一场灾难。 (3认同)