Come funziona questa casella di controllo e come posso utilizzarla?


150

Di recente mi sono registrato al sito Web di oneplusone https://account.oneplus.net/sign-up e ho notato che questa casella di controllo è stata riconfigurata

checkbox recaptcha

Come funziona e come posso utilizzarlo sui miei siti? Molto meglio di quelle parole / cifre criptiche :)

Il sito recaptcha non menziona alcun nuovo metodo di recaptcha ... https://www.google.com/recaptcha/intro/index.html


14
L'ho visto esattamente nello stesso posto e mi chiedevo esattamente la stessa cosa. Sto offrendo una taglia per attirare l'attenzione. Sono anche curioso.
Madara's Ghost

Forse è in fase di test e non è ancora pronto per essere rilasciato?
user3791372

1
Un modo semplice per farlo è che i $('form input[type=submit]') .before('<div>Are you a human? <input type="checkbox" name="captcha" /></div>');robot non selezioneranno la casella perché non fa parte del modulo. jsfiddle.net/s6jkchmz
TylerH

1
C'è anche il metodo honeypot di mettere un campo di input irresistibile nel modulo (come 'commenti') e poi nasconderlo con css / js. Se i dati sono presenti, il mittente è un bot. L'ho usato e funziona sorprendentemente bene.
David H. Bennett,

Risposte:


30

Questa è un'API beta per reCAPTCHA. Lo raccolgo dalla fonte della loro API JS: https://www.google.com/recaptcha/api.js che fa riferimento a "API2". E ho anche trovato questo: http://jaswsinc.com/recaptcha-ads/ Apparentemente hanno fatto una beta solo su invito del loro "no CAPTCHA reCAPTCHA" Quindi .... Probabilmente non sarai in grado di farlo funzionare su il tuo sito, ancora. Non riesco a trovare alcuna informazione sull'attivazione della beta, ma se cerchi "No CAPTCHA reCAPTCHA beta" puoi vedere un certo numero di persone che hanno menzionato di aver ricevuto l'e-mail da Google per farle partecipare.

Se trovi un posto per entrare nella beta, ti preghiamo di condividere! Altrimenti sembra che l'uscita pubblica arriverà nel 2015 ...


1
Si potrebbe provare a Frankenstein qualcosa insieme usando gstatic.com/recaptcha/api2/r20140903161709/recaptcha__en.js se si cerca "g-recaptcha", "Io non sono un robot" o "casella di controllo" è possibile trovare il codice che è implementandolo lì.
Ian M,

3
Estratto dall'e-mail:We expect to move all existing reCAPTCHA sites to the new API in 2015.
Timothy Zorn,

1
Ecco il post sul blog di Google che annuncia la nuova funzione No CAPTCHA reCAPTCHA: googleonlinesecurity.blogspot.com/2014/12/…
Nealvs,

4
Dove spiega questo, come funziona il nuovo No CAPTCHA reCAPTCHA?
Nikhil Girraj,

5
@NikhilGirraj, se volete sapere come No CAPTCHA reCAPTCHA funziona , vi puntare a questo post .
Igor Savinkin,

114

Questa voce non risponde alla domanda originale, tuttavia aiuta a implementare una soluzione simile. Come ha detto @IanM, la casella di controllo recaptcha è in fase beta e non può essere utilizzata senza invito.

MODIFICA IMPORTANTE Google ha introdotto il nuovo reCAPTCHA

Questo è un CAPTCHA basato su JavaScript.

Poiché la maggior parte degli spambots non esegue JavaScript e non è in grado di identificare la correlazione tra il testo visualizzato e il DOM o le azioni richieste, non possono fare clic sulla casella di controllo.

Si prega di notare che non esiste alcuna casella di controllo, è solo un elemento div con uno stile CSS. Gli spambots stanno provando a riempire gli elementi di input del modulo, ma non ci sono input nel CAPTCHA. Il segno di spunta è solo un altro div (classe css).

Quando si fa clic sulla casella, una richiesta Ajax notifica al server che è stato fatto clic sul div e il server memorizza queste informazioni in un archivio temporaneo (contrassegna il token: questo token è stato attivato da un essere umano). Quando si invia il modulo, un campo nascosto invia il token che è stato attivato, quindi quando il server convalida le informazioni del modulo riconoscerà che il token è stato attivato. Se il token non è attivato, il modulo verrà invalidato.

I passaggi nei punti elenco:

  • Generare un identificatore univoco e aggiungerlo al modulo con un input nascosto
  • Rendere una casella di controllo sul sito (senza utilizzare l' <input>elemento, possibilmente utilizzando <div>) e aggiungere l'identificatore precedentemente generato ad esso (è possibile utilizzare gli data-*attributi HTML5 )
  • Quando l'utente fa clic sulla casella di controllo, invia una richiesta Ajax al server e convalida CAPTCHA, se è valido, contrassegnalo come in use. (Mostra il risultato - l'identificatore è OK / non OK - per l'utente)
  • Quando l'utente invia il modulo, i dati del modulo contengono l'identificatore. Controllalo ancora una volta, dovrebbe esistere e dovrebbe essere nello in usestato.
  • Se vengono superate tutte le convalide, i dati del modulo sono pronti per l'uso / l'elaborazione

È possibile associare l'identificatore alla sessione dell'utente, all'indirizzo IP e / o utilizzare i limiti di tempo per migliorare la sicurezza.

NOTA Questo tipo di CAPTCHA funziona solo quando JavaScript è abilitato!

NOTA (modifica 1) Come affermato da @crazypotato, ci sono alcuni strumenti di automazione, che possono eseguire JavaScript, questi strumenti sono anche in grado di inviare la richiesta AJAX corretta e generare l'evento Click nella casella di controllo div.

NOTA (modifica 2) Prima o poi, uno script scritto in un sito specifico o per interrompere un tipo di captcha passerà attraverso. Non esiste una protezione definitiva, puoi solo far lavorare di più i robot (o i loro sviluppatori).

NOTA (modifica 3) I passaggi e la descrizione in questa risposta contengono solo alcune informazioni di base su questo tipo di captcha, devi sempre aggiungere ulteriori convalide e passaggi di sicurezza per renderlo più sicuro. Ad esempio, Google noCaptcha lancia sistematicamente un reCaptcha standard dopo 3 "clic div".


4
Penso che la domanda riguardi specificamente "Come posso abilitare questa funzione con reCAPTCHA di Google?" Sono abbastanza fiducioso di poterlo implementare da solo, ma non è così semplice con il loro caso.
Madara's Ghost

Se fai clic su Segnala un problema nella parte inferiore di una pagina Streetview otterrai lo stesso nuovo Recaptcha. È lì che l'ho visto per la prima volta e ho trovato questa pagina SO quando sono andato a cercare.
user2605793,

1
Cosa impedirebbe a un bot di inviare quella richiesta Ajax? Se tutti (o un sito semi-grande) dovessero implementare un CAPTCHA in questo modo, sarebbe sicuramente sfruttato comunque. Cloudflare ha un sistema di rilevamento dei bot simile che sembra funzionare senza richiedere all'utente di fare nulla.
Steen Schütt,

Prima di tutto, sono totalmente d'accordo con il tuo commento e sì, un bot scritto direttamente per sfruttare un sito sarà attraversato (e questo è vero per qualsiasi tipo di captha). Ho iniziato il mio post con most botse non all bots. Ci sono anche soluzioni quando il captcha breaker basato sull'immagine invia semplicemente l'immagine a un software e a un tipo umano nei personaggi (e il dipendente viene pagato dal conteggio dei post riusciti). Come lo impediresti? :)
Pred

1
@Pred "Gli spambots stanno provando a riempire gli elementi di input del modulo, ma non ci sono input nel CAPTCHA." È patetico. jackiechanface.jpg
crazypotato,

9

Ecco il mio codice in esecuzione senza problemi in PHP:

Dalla parte del cliente:

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

Lato server:

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

:)


non hai tralasciato alcune parti del codice lato client / html? chiedo solo perché nel tuo codice PHP stai controllando un post chiamato g-recaptcha-responsema nessun tale elemento è definito nel tuo codice lato client ... mi sto perdendo qualcosa?
Benomatis,

5

Sono venuto qui nella mia ricerca, non ho visto una risposta e quindi ho continuato a cercare.

Dopo la mia ricerca, questa finestra era ancora aperta, quindi sto aggiornando questo post con i miei risultati.

Ecco dove è possibile conoscere reCAPTCHA :

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

Fondamentalmente, però, lo aggiungi alla tua pagina 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>

Per ottenere le tue chiavi reCAPTCHA , vai a questo sito Google:

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

Una volta che hai le tue chiavi usando il link sopra, puoi approfondire la codifica usando le seguenti informazioni di Google:

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

NOTA:

Dalla documentazione di Google:

Lo script deve essere caricato utilizzando il protocollo HTTPS e può essere incluso da qualsiasi punto della pagina senza restrizioni.

Ecco un esempio di come l'ho fatto funzionare:

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

Se devi convalidare nel code-behind ASP.NET, verifica semplicemente che il controllo "g-recaptcha-response" sia compilato:

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

Spero che alcuni di voi lo trovino utile.


3

Grazie a tutti per il vostro contributo a questo thread, è bello vedere così tante persone interessate al nuovo strumento di recaptcha.

Non sono riuscito a trovarne un'implementazione .net, quindi ho creato un semplice controllo dei moduli Web, che puoi trovare qui https://github.com/pnmcosta/recaptchav2dotnet

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.