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.