web-dev-qa-db-de.com

Google reCAPTCHA V2 JavaScript Wir haben festgestellt, dass Ihre Website reCAPTCHA-Lösungen nicht überprüft

Fehlermeldung Wir haben festgestellt, dass Ihre Site reCAPTCHA-Lösungen nicht überprüft. Dies ist für die ordnungsgemäße Verwendung von reCAPTCHA auf Ihrer Site erforderlich. Weitere Informationen finden Sie auf unserer Entwicklerseite. Ich habe diesen reCaptcha-Code erstellt, er funktioniert gut, aber ich weiß nicht, wie ich ihn validieren kann. Ich dachte, er würde mit der Funktion grecaptcha.getResponse(); validieren, aber es war nicht so .. _ gut auf der Website, aber ich habe gerade in Google Admin die nächste Nachricht gesehen:  enter image description here

Anforderungen: 1. Verwenden Sie action="file.php" nicht im Formular, sondern nur eine Javascript-Funktion im Formular.

     <!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>

Mögest du mir bitte helfen. Ich würde es sehr schätzen. Wie kann ich es validieren, da ich beim Senden eine JavaScript-Funktion onsubmit="return get_action();" anstelle von action="file.php" * verwenden muss ?:

4
jeirueda

Die Funktion grecaptcha.getResponse() stellt Ihnen nur das Antworttoken des Benutzers zur Verfügung, das dann mit HTTP POST call auf dem google reCAPTCHA-Server überprüft werden muss.

Sie können die Anforderung AJAX verwenden, um das Token zu validieren. Diese Überprüfungen sollten jedoch aus Sicherheitsgründen immer auf Serverseite durchgeführt werden. JavaScript konnte immer von Benutzern eingemischt und in den Glauben gebracht werden, dass reCAPTCHA glaubt wurde erfolgreich verifiziert.

Google reCAPTCHA-Dokumente :

Nachdem Sie das Antworttoken abgerufen haben, müssen Sie es mit reCAPTCHA mit der folgenden API überprüfen, um sicherzustellen, dass das Token gültig ist.

Sie müssen also Ihr reCAPTCHA-Secret (den zweiten Schlüssel, der für Sie auf der reCAPTCHA-Verwaltungsseite generiert wurde) und das Benutzerantworttoken (das von der Funktion grecaptcha.getResponse() erhaltene) an die reCAPTCHA-API senden, wie in reCAPTCHA beschrieben docs .

In PHP würden Sie Folgendes tun:

$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"}
}
3
TheKronnY

Dies ist, was ich vorschlagen würde ...

1.) Hängen Sie eine Abfragezeichenfolge an Ihr reCPATCHA-Skript an. Um die Leistung zu verbessern und das Blockieren des Renderings zu verhindern, können Sie async defer - Attribute zu Ihrem <script ...> Hinzufügen. Und für die Richtigkeit sollten Sie das Skript nach dem <form> Im DOM verschieben. ...</form> <script src='https://www.google.com/recaptcha/api.js?onload=recaptchaRender' async defer></script>.

2.) Fügen Sie eine neue Funktion mit dem Namen recaptchaRender() hinzu. Um Ihre Validierung an Google abzuwickeln und die Antwort auf Ihren Rückruf get_action Auszulagern. Ersetzen Sie RECAPTCHA_SITE_KEY Durch Ihren Google-Site-Schlüssel.

function recaptchaRender{
    grecaptcha.render( 'reCaptchSubmit', {
        'sitekey': 'RECAPTCHA_SITE_KEY',
        'callback': get_action
    });
}

3.) Fügen Sie Ihrer Senden-Schaltfläche id="reCaptchSubmit" Hinzu.

4.) Entfernen Sie onsubmit="return get_action();" aus Ihrem Formularelement.

Im Grunde hat Ihnen die Authentifizierung zwischen Ihrem Skript und Google gefehlt. Dies übernimmt nicht die Formularvalidierung, sondern führt Sie zumindest zu Ihrem Render-Rückruf get_action(), in dem Sie die Validierung durchführen können - möglicherweise möchten Sie den Namen in etwas relevanteres ändern, d. H. validateForm() etc

0
Lawless