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

150

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

case à cocher recaptcha

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

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

Pedro Maia Costa
la source
14
Je l'ai vu exactement au même endroit et je me suis demandé exactement la même chose. Je mets une prime pour attirer l'attention. Je suis aussi curieux.
Madara's Ghost
Peut-être est-il en cours de test et n'est pas encore prêt à être publié?
user3791372
1
Un moyen simple de le faire est que les $('form input[type=submit]') .before('<div>Are you a human? <input type="checkbox" name="captcha" /></div>');bots ne cochent pas la case car elle ne fait pas partie du formulaire. jsfiddle.net/s6jkchmz
TylerH
1
Il y a aussi la méthode honeypot qui consiste à mettre un champ de saisie irrésistible dans le formulaire (comme «commentaires»), puis à le masquer avec css / js. Si les données sont présentes, l'expéditeur est un bot. Je l'ai utilisé et cela fonctionne étonnamment bien.
David
2
Pour votre information: googleonlinesecurity.blogspot.hu/2014/12/...
Pred

Réponses:

30

Il s'agit d'une API bêta pour reCAPTCHA. Je récupère cela à partir de la source de leur API JS: https://www.google.com/recaptcha/api.js référence à "API2". Et j'ai aussi trouvé ceci: http://jaswsinc.com/recaptcha-ads/ Apparemment, ils ont fait une version bêta sur invitation seulement de leur "no CAPTCHA reCAPTCHA" Donc ... Vous ne pourrez probablement pas le faire fonctionner. votre site, encore. Je ne trouve aucune information sur l'activation de la version bêta, mais si vous recherchez "Pas de CAPTCHA reCAPTCHA bêta", vous pouvez voir un certain nombre de personnes qui ont mentionné avoir reçu l'e-mail de Google pour les rejoindre.

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

Je suis
la source
1
Vous pouvez essayer de frankenstein quelque chose ensemble en utilisant gstatic.com/recaptcha/api2/r20140903161709/recaptcha__en.js si vous recherchez "g-recaptcha", "Je ne suis pas un robot" ou "case à cocher", vous pouvez trouver le code qui est l'implémenter là-bas.
Ian M
3
Extrait de l'email:We expect to move all existing reCAPTCHA sites to the new API in 2015.
Timothy Zorn
1
Voici l'article de blog de Google annonçant la nouvelle fonctionnalité No CAPTCHA reCAPTCHA: googleonlinesecurity.blogspot.com/2014/12
...
4
Où cela explique-t-il, comment fonctionne le nouveau No CAPTCHA reCAPTCHA?
Nikhil Girraj
5
@NikhilGirraj, si vous voulez savoir comment Aucun CAPTCHA reCAPTCHA fonctionne , je vous renvoie ce poste .
Igor Savinkin
114

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

IMPORTANT EDIT Google a présenté le nouveau reCAPTCHA

Ceci 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 d'entrée du formulaire, mais il n'y a pas d'entrée dans le CAPTCHA. La coche est juste un autre div (classe css).

Lorsque vous cliquez sur la case, une requête ajax informe le serveur que le div a été cliqué et 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 dans les puces:

  • Générez un identifiant unique et ajoutez-le au formulaire avec une entrée masquée
  • Rendre une case à cocher sur le site (sans utiliser l' <input>élément, éventuellement en utilisant<div> ) et y ajouter l'identifiant précédemment généré (vous pouvez utiliser les data-*attributs html5 )
  • Lorsque l'utilisateur clique sur la case à cocher, envoyez une requête ajax au serveur et validez 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, les données du formulaire contiennent l'identifiant. Vérifiez-le une fois de plus, il devrait exister et il devrait être enin use état.
  • Si toutes les validations sont réussies, 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 vous pouvez utiliser des limites de temps pour améliorer la sécurité.

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

REMARQUE (modifier 1) Comme @crazypotato l'a déclaré, il existe des outils d'automatisation, qui peuvent exécuter JavaScript, ces outils sont également capables d'envoyer la requête AJAX appropriée et de déclencher l'événement Click sur la case à cocher div.

REMARQUE (modifier 2) Veuillez noter qu'un script écrit spécifiquement sur un site ou pour casser un type de captcha passera tôt ou tard. Il n'y a pas de protection ultime, vous ne pouvez que faire travailler plus dur les robots (ou leurs développeurs).

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

Préd
la source
4
Je pense que la question porte spécifiquement sur "Comment activer cette fonctionnalité avec le reCAPTCHA de Google?" Je suis assez confiant que je peux mettre en œuvre cela moi-même, mais ce n'est pas aussi simple avec leur cas.
Madara's Ghost
Si vous cliquez sur Signaler un problème au bas d'une page Streetview, vous obtenez le même nouveau Recaptcha. C'est là que je l'ai vu pour la première fois et j'ai trouvé cette page SO lorsque je suis allé chercher.
user2605793
1
Qu'est-ce qui empêcherait un bot d'envoyer cette requête ajax? Si tout le monde (ou un site semi-grand) implémentait un CAPTCHA comme celui-ci, il serait sûrement exploité de toute façon. Cloudflare dispose d'un système de détection de bots similaire qui semble fonctionner sans que l'utilisateur ne fasse quoi que ce soit.
Steen Schütt
Tout d'abord, je suis totalement d'accord avec votre commentaire et oui, un bot écrit directement pour exploiter un site passera (et cela est vrai pour tout type de capthas). J'ai commencé mon message avec most botset non all bots. Il existe également des solutions lorsque le briseur de captcha basé sur l'image envoie simplement l'image à un logiciel et qu'un humain tape les personnages (et l'employé est payé par le nombre de messages réussis). Comment éviterais-tu cela? :)
Pred
1
@Pred "Les spambots essaient de remplir les éléments d'entrée du formulaire, mais il n'y a pas d'entrée dans le CAPTCHA." C'est pathétique. jackiechanface.jpg
crazypotato
9

Voici mon code fonctionnant sans problème en PHP:

Côté client:

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

Du 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();

:)

ismaestro
la source
N'avez-vous pas oublié certaines parties du code côté client / html? demandez simplement parce que dans votre code PHP vous comparez un article nommé g-recaptcha-responsemais aucun élément de ce type n'est défini dans votre code côté client ... est-ce que je manque quelque chose?
benomatis
5

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, donc je mets à jour ce post avec mes résultats.

Voici où vous pouvez en savoir plus sur reCAPTCHA :

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

En gros, cependant, 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 votre reCAPTCHA clés , 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 de cela en utilisant les informations Google suivantes:

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

REMARQUE:

À partir 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 fait fonctionner:

<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 avez besoin de valider dans le code-behind ASP.NET, vérifiez simplement que le contrôle "g-recaptcha-response" est rempli:

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

Espérons que certains d'entre vous trouvent cela utile.

jp2code
la source
3

Merci à tous pour votre contribution à ce fil, c'est formidable de voir autant de personnes intéressées par le nouvel outil recaptcha.

Je n'ai pas trouvé d'implémentation .net de celui-ci, j'ai donc créé un contrôle de formulaires Web simple, que vous pouvez trouver ici https://github.com/pnmcosta/recaptchav2dotnet

Pedro Maia Costa
la source