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

错误信息
我们检测到您的网站未验证reCAPTCHA解决方案.这是在您的网站上正确使用reCAPTCHA所必需的.有关更多信息,请参阅我们的开发者网站
我创建了这个reCaptcha代码,它运行良好,但我不知道如何验证它,我认为它是通过函数验证
grecaptcha.getResponse();但事实并非如此.
显然,recaptcha在网站上运行良好,但我刚在谷歌管理员看到下一条消息:

enter image description here


要求:
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>

求你帮帮我吧.我会很感激
我如何验证它,因为我需要使用javascript函数onsubmit =“return get_action();”而不是action =“file.PHP”*当我提交?:

解决方法:

grecaptcha.getResponse()函数只会为您提供用户响应令牌,然后必须使用google reCAPTCHA服务器上的HTTP POST调用进行验证.

您可以使用AJAX请求来验证令牌,但出于安全原因,这些验证应该始终在服务器端完成 – JavaScript可能总是被用户干扰并且被欺骗相信reCAPTCHA已成功验证.

Google reCAPTCHA docs

After you get the response token, you need to verify it with reCAPTCHA using the following API to ensure the token is valid.

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

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"}
}

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...