web-dev-qa-db-fra.com

Google reCAPTCHA V2 JavaScript Nous avons détecté que votre site ne vérifie pas les solutions reCAPTCHA.

Message d'erreur Nous avons détecté que votre site ne vérifie pas les solutions reCAPTCHA. Ceci est nécessaire pour l'utilisation correcte de reCAPTCHA sur votre site. Veuillez consulter notre site de développeur pour plus d'informations. J'ai créé ce code reCaptcha, cela fonctionne bien mais je ne sais pas comment puis-je le valider, je pensais qu'il était en train de valider avec la fonction grecaptcha.getResponse(); mais ce n'était pas le cas . Apparemment, le recaptcha fonctionnait bien sur le site, mais je viens de voir dans Google admin le message suivant:  enter image description here

Exigences: 1.N'utilisez pas action="file.php" dans le formulaire, mais seulement une fonction javascript dans le formulaire.

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

Puissiez vous m'aider s'il vous plait. Je l’apprécierais beaucoup. Comment puis-je le valider, car j’ai besoin d’utiliser une fonction javascript onsubmit="return get_action();" au lieu de action="file.php" * lors de la soumission?

4
jeirueda

La fonction grecaptcha.getResponse() ne vous fournira que le jeton de réponse de l'utilisateur, qui doit ensuite être validé avec l'appel HTTP POST sur le serveur google reCAPTCHA.

Vous pouvez utiliser la requête AJAX pour valider le jeton, mais ces validations doivent toujours être effectuées côté serveur, pour des raisons de sécurité - JavaScript aurait toujours pu être manipulé par l'utilisateur et amené à croire que reCAPTCHA a été vérifié avec succès.

Google reCAPTCHA docs :

Après avoir obtenu le jeton de réponse, vous devez le vérifier avec reCAPTCHA à l'aide de l'API suivante pour vous assurer que le jeton est valide.

Vous devez donc envoyer votre secret reCAPTCHA (la deuxième clé générée pour vous dans la page admin reCAPTCHA) et votre jeton de réponse utilisateur (celui reçu de la fonction grecaptcha.getResponse()) à l'API reCAPTCHA, comme décrit dans reCAPTCHA docs .

Dans PHP, vous feriez quelque chose comme ceci:

$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

C'est ce que je suggérerais ...

1.) Ajoutez une chaîne de requête à votre script reCPATCHA. Pour améliorer les performances et empêcher le blocage du rendu, vous pouvez également ajouter des attributs async defer à votre <script ...>. Et pour être correct, vous devez déplacer le script après le <form> dans le DOM. ...</form> <script src='https://www.google.com/recaptcha/api.js?onload=recaptchaRender' async defer></script>.

2.) Ajoutez une nouvelle fonction appelée recaptchaRender(). Pour gérer votre validation auprès de Google et décharger la réponse à votre rappel, appelez get_action. Remplacez RECAPTCHA_SITE_KEY par votre clé de site Google.

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

3.) Ajoutez id="reCaptchSubmit" à votre bouton d'envoi.

4.) Supprimez onsubmit="return get_action();" de votre élément de formulaire.

Il vous manquait essentiellement l’authentification entre votre script et Google. Cela ne gère pas la validation de vos formulaires, mais vous conduira au moins à votre callback de rendu get_action(), où vous pourrez gérer la validation - voudrez peut-être renommer quelque chose de plus pertinent, à savoir validateForm() etc.

0
Lawless