web-dev-qa-db-fra.com

Comment cette case à cocher recaptcha fonctionne-t-elle et comment puis-je l'utiliser?

Je me suis récemment inscrit au site Web oneplusone https://account.oneplus.net/sign-up , et j'ai remarqué cette case à cocher recaptcha

checkbox recaptcha

Comment ça marche et comment puis-je l'utiliser sur mes sites? Beaucoup mieux que ces mots/chiffres cryptiques :)

Le site recaptcha ne mentionne aucune nouvelle méthode recaptcha ... https://www.google.com/recaptcha/intro/index.html

149
Pedro Maia Costa

Ceci est une API bêta pour reCAPTCHA. Je comprends cela à partir de la source de leur API JS: https://www.google.com/recaptcha/api.js faisant référence à "API2". Et j'ai aussi trouvé ceci: http://jaswsinc.com/recaptcha-ads/ Apparemment, ils ont réalisé une version bêta sur invitation de leur "no CAPTCHA reCAPTCHA". Alors ... vous ne le ferez probablement pas être capable de le faire fonctionner sur votre site, pour le moment. Je ne trouve aucune information sur la participation à la version bêta, mais si vous recherchez "Pas de CAPTCHA reCAPTCHA bêta", vous pourrez voir un certain nombre de personnes ayant indiqué avoir reçu un e-mail de Google pour pouvoir les rejoindre.

Si vous trouvez un endroit pour entrer dans la version bêta, partagez-le! Sinon, il semblerait que la sortie publique arrive en 2015 ...

30
Ian M

Cette entrée ne répond pas à la question d'origine, mais il est utile de mettre en œuvre une solution similaire.  Comme @IanM l'a dit, la case à cocher recaptcha est en phase bêta et ne peut être utilisée sans invitation.

IMPORTANT EDIT Google a présenté le nouveau reCAPTCHA

C'est un CAPTCHA basé sur JavaScript.

Comme la plupart des spambots n'exécutent pas JavaScript et ne peuvent pas identifier la corrélation entre le texte affiché et le DOM ou les actions requises, ils ne peuvent pas cliquer sur la case à cocher.

Veuillez noter qu'il n'y a pas de case à cocher du tout, c'est juste un élément div avec un style CSS. Les spambots tentent de remplir les éléments de saisie du formulaire, mais il n’ya pas d’entrée dans le CAPTCHA. La coche est juste une autre div (classe css).

Lorsque vous cliquez sur la boîte, une demande ajax informe le serveur que la div a été cliquée et que le serveur stocke ces informations dans un stockage temporaire (marque le jeton: ce jeton a été activé par un humain). Lorsque vous soumettez le formulaire, un champ masqué envoie le jeton qui a été activé, puis lorsque le serveur valide les informations du formulaire, il reconnaît que le jeton a été activé. Si le jeton n'est pas activé, le formulaire sera invalidé.

Les étapes en points:

  • Générer un identifiant unique et l'ajouter au formulaire avec une entrée masquée
  • Afficher une case à cocher sur le site (sans utiliser l'élément <input>, éventuellement avec <div>) et y ajouter l'identificateur généré précédemment (vous pouvez utiliser les attributs html5 data-*)
  • Lorsque l'utilisateur coche la case, envoie une demande ajax au serveur et valide le CAPTCHA. S'il est valide, marquez-le comme in use. (Afficher le résultat - l'identifiant est OK/pas OK - à l'utilisateur)
  • Lorsque l'utilisateur envoie le formulaire, ses données contiennent l'identifiant. Vérifiez-le encore une fois, il devrait exister et il devrait être dans l'état in use.
  • Si toutes les validations sont passées, les données du formulaire sont prêtes à être utilisées/traitées

Vous pouvez lier l'identifiant à la session de l'utilisateur, à l'adresse IP et/ou utiliser des délais pour améliorer la sécurité.

NOTE Ce type de CAPTCHA ne fonctionne que lorsque le JavaScript est activé!

NOTE (edit 1) Comme @crazypotato l’a indiqué, il existe des outils d’automatisation permettant d’exécuter JavaScript. Ces outils peuvent également envoyer le AJAX demande et déclenche l'événement Click sur la case à cocher div.

NOTE (edit 2) Veuillez noter qu'un script écrit spécifiquement pour un site ou pour casser un type de captcha sera adopté tôt ou tard. Il n'y a pas de protection ultime, vous pouvez seulement forcer les bots (ou leurs développeurs) à travailler plus fort.

NOTE (modifier 3) Les étapes et la description de cette réponse ne contiennent que des informations de base sur ce type de captcha. Vous devez toujours ajouter des validations et mesures de sécurité pour le rendre plus sécurisé. Par exemple, Google noCaptcha déclenche systématiquement un reCaptcha standard après 3 "clics div".

114
Pred

Voici mon code s'exécutant sans problème en PHP:

Côté client:

<div class="g-recaptcha" data-sitekey="PUBLIC_KEY"></div>

Côté serveur:

if (isset($_POST['g-recaptcha-response'])) {
    $captcha = $_POST['g-recaptcha-response'];
    $privatekey = "SECRET_KEY";
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = array(
        'secret' => $privatekey,
        'response' => $captcha,
        'remoteip' => $_SERVER['REMOTE_ADDR']
    );

    $curlConfig = array(
        CURLOPT_URL => $url,
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POSTFIELDS => $data
    );

    $ch = curl_init();
    curl_setopt_array($ch, $curlConfig);
    $response = curl_exec($ch);
    curl_close($ch);
}

$jsonResponse = json_decode($response);

if ($jsonResponse->success == "true")
    doSomething();
else
    doSomeOtherThing();

:)

9
ismaestro

Je suis venu ici dans ma recherche, je n'ai pas vu de réponse et j'ai donc continué à chercher.

Après ma recherche, cette fenêtre était toujours ouverte et je mets donc à jour ce post avec mes résultats.

Voici où vous pouvez en apprendre davantage sur reCAPTCHA :

http://scraping.pro/no-captcha-recaptcha-challenge/

Fondamentalement, vous ajoutez ceci à votre page Web:

<script src="https://www.google.com/recaptcha/api.js" >;
<form method="post">
    <div class="g-recaptcha" data-sitekey="[site key issued by google]"></div>
    <input value="submit" type="submit" />
</form>

Pour obtenir vos clés reCAPTCHA , accédez à ce site Google:

https://www.google.com/recaptcha/intro/index.html

Une fois que vous avez vos clés en utilisant le lien ci-dessus, vous pouvez approfondir le codage en utilisant les informations Google suivantes:

https://developers.google.com/recaptcha/

REMARQUE:

De la documentation Google:

Le script doit être chargé à l'aide du protocole HTTPS et peut être inclus à partir de n'importe quel point de la page sans restriction.

Voici un exemple de la façon dont je l’ai obtenu:

<html>
<head>
    <title>Contact</title>
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
    <script>
    var onloadCallback = function () {
        grecaptcha.render('dvCaptcha', {
            'sitekey': '<%=ReCaptcha_Key %>',
            'callback': function (response) {
                $.ajax({
                    type: "POST",
                    url: "CS.aspx/VerifyCaptcha",
                    data: "{response: '" + response + "'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (r) {
                        var captchaResponse = jQuery.parseJSON(r.d);
                        if (captchaResponse.success) {
                            $("[id*=txtCaptcha]").val(captchaResponse.success);
                            $("[id*=lblAlarm]").hide();
                        } else {
                            $("[id*=txtCaptcha]").val("");
                            $("[id*=lblAlarm]").show();
                            var error = captchaResponse["error-codes"][0];
                            $("[id*=lblAlarm]").html("RECaptcha error. " + error);
                        }
                    }
                });
            }
        });
    };
    </script>
</head>
<body>
    <form action="?" method="POST">
        <div id="dvCaptcha" class="g-recaptcha" data-sitekey="[site key issued by google]"></div>
        <br />
        <asp:Button ID="btnSubmit" runat="Server" Text="Send" OnClick="btnSubmit_Click" />
        <asp:Label ID="lblAlarm" runat="server" ForeColor="Red"></asp:Label>
    </form>
</body>
</html>

Si vous devez valider dans le code-behind ASP.NET, vérifiez simplement que le contrôle "g-recaptcha-response" est bien renseigné:

protected static string ReCaptcha_Key, ReCaptcha_Secret;

protected void btnSubmit_Click(object sender, EventArgs e)
{
    if (!String.IsNullOrEmpty(Request.Form["g-recaptcha-response"]))
    {
        // other code
    } else
    {
       lblAlarm.Text = "reCAPTCHA failed.";
    }
}

J'espère que certains d'entre vous trouveront cela utile.

5
jp2code

Merci à tous pour votre contribution à ce fil de discussion. C’est un plaisir de voir autant de personnes intéressées par le nouvel outil recaptcha.

Je ne pouvais pas trouver une implémentation .net, j'ai donc construit un contrôle de formulaire Web simple, que vous pouvez trouver ici https://github.com/pnmcosta/recaptchav2dotnet

3
Pedro Maia Costa