¿Cómo funciona esta casilla de verificación recaptcha y cómo puedo usarla?

150

Recientemente me he registrado en el sitio web de oneplusone https://account.oneplus.net/sign-up , y noté esta casilla de verificación recaptcha

casilla de verificación recaptcha

¿Cómo funciona y cómo puedo usarlo en mis sitios? Mucho mejor que esas palabras / dígitos crípticos :)

El sitio recaptcha no menciona ningún método nuevo recaptcha ... https://www.google.com/recaptcha/intro/index.html

Pedro Maia Costa
fuente
14
Lo vi exactamente en el mismo lugar y me pregunté exactamente lo mismo. Estoy ofreciendo una recompensa para llamar la atención. Tengo curiosidad también.
Madara Ghost
¿Tal vez está en pruebas y aún no está listo para ser lanzado?
user3791372
1
Una manera fácil de hacer esto es que los $('form input[type=submit]') .before('<div>Are you a human? <input type="checkbox" name="captcha" /></div>');bots no marquen la casilla porque no es parte del formulario. jsfiddle.net/s6jkchmz
TylerH
1
También existe el método honeypot de poner un campo de entrada irresistible en el formulario (como 'comentarios') y luego ocultarlo con css / js. Si los datos están presentes, el remitente es un bot. He usado esto y funciona sorprendentemente bien.
David H. Bennett

Respuestas:

30

Esta es una API beta para reCAPTCHA. Recojo esto de la fuente de su API JS: https://www.google.com/recaptcha/api.js que hace referencia a "API2". Y también encontré esto: http://jaswsinc.com/recaptcha-ads/ Aparentemente hicieron una beta solo por invitación de su "no CAPTCHA reCAPTCHA" Entonces ... Probablemente no puedas hacer que funcione. su sitio, todavía. No puedo encontrar ninguna información sobre cómo optar por la versión beta, pero si busca "No CAPTCHA reCAPTCHA beta", puede ver a varias personas que han mencionado recibir el correo electrónico de Google para que se unan.

Si encuentra un lugar para ingresar a la versión beta, ¡comparta! De lo contrario, parece que el lanzamiento público llegará en 2015 ...

Ian M
fuente
1
Usted podría tratar de frankenstein algo juntos usando gstatic.com/recaptcha/api2/r20140903161709/recaptcha__en.js si la búsqueda de "g-Reconocer texto", "No soy un robot" o "casilla de verificación" se puede encontrar el código que es implementando allí.
Ian M
3
Extracto del correo electrónico:We expect to move all existing reCAPTCHA sites to the new API in 2015.
Timothy Zorn
1
Aquí está la publicación de blog de Google que anuncia la nueva función No CAPTCHA reCAPTCHA: googleonlinesecurity.blogspot.com/2014/12/…
Nealvs
44
¿Dónde explica esto, cómo funciona el nuevo No CAPTCHA reCAPTCHA?
Nikhil Girraj
55
@NikhilGirraj, si desea saber cómo Sin CAPTCHA reCAPTCHA funciona , te apuntan a esta entrada .
Igor Savinkin
114

Esta entrada no responde la pregunta original, sin embargo, ayuda a implementar una solución similar. Como dijo @IanM, la casilla de verificación recaptcha está en fase beta y no se puede usar sin invitación.

EDICIÓN IMPORTANTE Google presentó el nuevo reCAPTCHA

Este es un CAPTCHA basado en JavaScript.

Como la mayoría de los spambots no ejecutan JavaScript y no pueden identificar la correlación entre el texto mostrado y el DOM o las acciones requeridas, no pueden hacer clic en la casilla de verificación.

Tenga en cuenta que no hay ninguna casilla de verificación, es solo un elemento div con algo de estilo CSS. Los robots de spam intentan llenar los elementos de entrada del formulario, pero no hay entrada en el CAPTCHA. La marca de verificación es solo otro div (clase css).

Cuando hace clic en el cuadro, una solicitud ajax notifica al servidor que se hizo clic en el div y el servidor almacena esta información en un almacenamiento temporal (marca el token: este token fue activado por un humano). Cuando envía el formulario, un campo oculto envía el token que se activó, luego, cuando el servidor valida la información del formulario, reconocerá que el token se activó. Si el token no está activado, el formulario se invalidará.

Los pasos en viñetas:

  • Genere un identificador único y agréguelo al formulario con una entrada oculta
  • Renderice una casilla de verificación en el sitio (sin usar el <input>elemento, posiblemente usando <div>) y agregue el identificador generado previamente (puede usar los data-*atributos html5 )
  • Cuando el usuario hace clic en la casilla de verificación, envíe una solicitud ajax al servidor y valide el CAPTCHA, si es válido márquelo como in use. (Mostrar el resultado - el identificador está bien / no está bien - para el usuario)
  • Cuando el usuario envía el formulario, los datos del formulario contienen el identificador. Verifíquelo una vez más, debe existir y debe estar en in useestado.
  • Si se pasan todas las validaciones, los datos del formulario están listos para usar / procesar

Puede vincular el identificador a la sesión del usuario, la dirección IP o puede usar límites de tiempo para mejorar la seguridad.

NOTA ¡ Este tipo de CAPTCHA solo funciona cuando JavaScript está habilitado!

NOTA (editar 1) Como dijo @crazypotato, hay algunas herramientas de automatización que pueden ejecutar JavaScript, estas herramientas también pueden enviar la solicitud AJAX adecuada y activar el evento Click en la casilla de verificación div.

NOTA (edición 2) Tenga en cuenta que un script escrito específicamente en un sitio o para romper un tipo de captcha se completará tarde o temprano. No existe una protección definitiva, solo puede hacer que los bots (o sus desarrolladores) trabajen más.

NOTA (edición 3) Los pasos y la descripción en esta respuesta solo contienen información básica sobre este tipo de captcha, siempre debe agregar validaciones adicionales y pasos de seguridad para hacerlo más seguro. Por ejemplo, Google noCaptcha dispara sistemáticamente un reCaptcha estándar después de 3 "clics div".

Pred
fuente
44
Creo que la pregunta es específicamente sobre "¿Cómo habilito esta función con reCAPTCHA de Google?" Estoy bastante seguro de que puedo implementar esto yo mismo, pero no es tan simple con su caso.
El fantasma de Madara
Si hace clic en Informar un problema en la parte inferior de una página de Streetview, obtiene el mismo nuevo Recaptcha. Ahí es donde lo vi por primera vez y encontré esta página SO cuando fui a buscar.
user2605793
1
¿Qué evitaría que un bot envíe esa solicitud ajax? Si todos (o un sitio semi grande) implementaran un CAPTCHA como este, seguramente sería explotado de todos modos. Cloudflare tiene un sistema de detección de bot similar que parece funcionar sin requerir que el usuario haga nada.
Steen Schütt
En primer lugar, estoy totalmente de acuerdo con tu comentario y sí, se conseguirá un bot escrito directamente para explotar un sitio (y esto es cierto para cualquier tipo de capthas). Comencé mi publicación con most botsy no all bots. También hay soluciones cuando el interruptor de captcha basado en imágenes simplemente envía la imagen a un software y un humano escribe los caracteres (y el empleado se paga por el recuento de publicaciones exitosas). ¿Cómo evitarías esto? :)
Pred
1
@Pred "Los robots de spam intentan llenar los elementos de entrada del formulario, pero no hay entrada en el CAPTCHA". Eso es patético jackiechanface.jpg
crazypotato
9

Aquí está mi código ejecutándose sin problemas en PHP:

Lado del cliente:

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

Lado del servidor:

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
fuente
¿No ha omitido algunas partes del código del cliente / html? solo pregunto porque en su código PHP está comprobando una publicación nombrada g-recaptcha-responsepero no se define ese elemento en su código del lado del cliente ... ¿Me estoy perdiendo algo?
benomatis
5

Vine aquí en mi búsqueda, no vi una respuesta, así que seguí buscando.

Después de mi búsqueda, esta ventana todavía estaba abierta, así que estoy actualizando esta publicación con mis hallazgos.

Aquí es donde puede aprender sobre reCAPTCHA :

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

Básicamente, sin embargo, agrega esto a su página 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>

Para obtener sus claves reCAPTCHA , vaya a este sitio de Google:

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

Una vez que tenga sus claves utilizando el enlace de arriba, puede profundizar en la codificación de esto utilizando la siguiente información de Google:

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

NOTA:

De la documentación de Google:

El script debe cargarse utilizando el protocolo HTTPS y puede incluirse desde cualquier punto de la página sin restricciones.

Aquí hay un ejemplo de cómo lo hice funcionar:

<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 necesita validar en el código subyacente de ASP.NET, simplemente verifique que el control "g-recaptcha-response" esté completo:

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

Con suerte, algunos de ustedes encontrarán esto útil.

jp2code
fuente
3

Gracias a todos por su contribución a este hilo, es genial ver a tanta gente interesada en la nueva herramienta recaptcha.

No pude encontrar una implementación de .net, así que he creado un control de formularios web simple, que puede encontrar aquí https://github.com/pnmcosta/recaptchav2dotnet

Pedro Maia Costa
fuente