Mantener los Bots Siempre es un juego de números, con tristeza, la disponibilidad de bibliotecas de aprendizaje de máquinas fáciles de usar hizo que los tipos de CAPTCHA clásicos sencillos sencillos. Google se encuentra a la vanguardia de la tormenta botting, después de todo, algo solo existe si se puede encontrar (prominentemente) en los índices de BIG G.
Debido a esto, Google Engineers dedicó cantidades significativas de esfuerzo para diseñar sistemas y soluciones anti-BOT. Se ponen a disposición de terceros a través de un producto llamado recaptcha, que iremos juntos durante los siguientes pasos. Para más herramientas no relacionadas con los bots, vea nuestra Herramientas de diseño web correo.
Sin embargo, antes de comenzar, se deben limpiar algunas cosas básicas. En primer lugar: mantener los bots fuera siempre un juego del lado del servidor. Inspección de los valores de retorno de su medida anti-bot en el cliente es idiota. Un atacante puede analizar el código fuente o simplemente trabajar alrededor de él al parchear la validación de retorno.
Solardeceriamente, tenga en cuenta que no todos los bots son creados iguales. El bloqueo de Googlebot, por ejemplo, lleva a su sitio web que no se está indexando más. Los problemas similares pueden ocurrir con otros bots específicos de la industria que a menudo son más buenos que los daños. Finalmente, los bots pueden ser un mal menor en algunos casos, cuando el tráfico es todo lo que necesita, un clic suyo hace clic en ser solo un clic.
Google mantiene un ojo cercano en los usuarios de recaptcha. Cabeza aquí [sesenta y cinco] y use su cuenta de Google para iniciar sesión. Agregue "localhost" además de su dominio favorito en dominios. Elija el tipo de casilla de verificación "No soy un robot", ya que es la medida anti-Bot más conocida.
Google Rewards Persistence en trabajar a través del proceso de configuración Al mostrar un servidor y una tecla de sitio. Si bien este último se puede compartir con terceros, asegúrese de que la clave secreta nunca abandone los confines de su entorno de servidor.
Google utiliza una variación del proceso de reto-respuesta para garantizar la integridad del resultado. Las instancias de CAPTCHA devuelven un valor criptográfico que el servidor es "Entregar" a un sistema de verificación alojado por BIG G, si los resultados resultan ser válidos, se devuelve una respuesta HTTP correcta a su lógica de back-end.
Es importante demostrar una solución de llave de giro que muestre todo el flujo de autenticación. Debido a esto, debemos comenzar con un "servidor" de las clases: Express JS fue un tema frecuente recientemente, así que lo implementamos en un esqueleto de proyecto recién creado.
Tamhan @ Tamhan-ThinkPad: ~ / NODESPACE / NODERVERIFICA $
NPM Init --y
Escribió a /Home/Tamhan/NoDespace/Nodeverify/Package.json:
. . .
Tamhan @ Tamhan-ThinkPad: ~ / NODESPACE / NODERVERIFICA $
NPM Instale la solicitud de Express Parser Body-Parser --AVE
. . .
+ [email protected]
+ [email protected]
+ [email protected]
Cargando la casilla de verificación conocida "No soy un robot" requiere un archivo HTML. Dado que esta es una muestra que demuestra el flujo de interacción, comienza con un documento estático que contiene el marcado que se muestra acompañando este paso.
& lt; html & gt;
& lt; cabeza y gt;
& lt; title & gt; reaptcha demo: página simple
& lt; / title & gt;
& lt; script src = "https://www.google.com/recaptcha/api.js" Async defer & gt; / lt; / script & gt;
& lt; / cabeza y gt;
& lt; cuerpo y gt;
& lt; formando acción = "?" Método = "POST" y GT;
& lt; div class = "g-recaptcha" data-siteykey = "your_site_key" & gt; / div & gt; / div & gt;
& lt; br / & gt;
& lt; Entrada Type = "Enviar" valor = "Enviar" & gt;
& lt; / FORK & GT;
& lt; / body & gt;
& lt; / html & gt;
Google proporciona un archivo API que contiene la lógica CAPTCHA. Cuando API.JS está cargado, el código contenido en él analiza el DOM y reemplaza cualquier & lt; div & gt; Etiquetas que contienen la etiqueta de clase correcta. & lt; someter & gt; Las etiquetas se dejan solas a partir de esta escritura. De cualquier manera, ejecute el código en un navegador elegido para ver los resultados que se muestran arriba.
Crear una cadena de entrega en Express.js requiere un poco de inteligencia. Un ayudante realmente útil es el bodyparser. Cuando se incorpore en un flujo de trabajo de representación, se puede acceder a los campos individuales del servidor utilizando patrones de diseño orientados a objetos que simplifican enormemente los manejarlos.
Var Express = Requerir ("Express");
var bodyparser = requieren ("parsero del cuerpo");
VAR Solicitud = Requerir ("Solicitud");
var myapp = expreso ();
myApp.use (bodyparser.json ());
myApp.use (bodyparser.urlencoded ({extendido: true}));
La casilla de verificación de Google hace su magia en el fondo, cuando se hace, se llama un nuevo campo g-recaptcha-respuesta Se agrega a los atributos del formulario. Estos datos deben enviarse a los servidores de Google para verificación. La larga cadena en el código que acompaña a este paso se reemplazará con el One Google asignado a usted.
MyApp.post ("/ Tamstest", Función (Solicitud, Respuesta) {
var recaptcha_url = "https://www.google.com/recaptcha/api/siteverify?";
recaptcha_url + = "Secret = 6lewmzgaaaaairsb2gv5akkx2cwyfulkzrmd7ws & amp;";
recaptcha_url + = "respuesta =" + solicitud.body ["g-recaptcha-respuesta"] + "& amp;";
recaptcha_url + = "remodel =" + solicitudes.connection.remoteaddress;
La siguiente ley implica disparar la URL al servidor. Esto se logra a través de una solicitud de JSON tradicional basada en la dirección creada en el paso anterior. Luego, se analizan los resultados, si se lanza un error, se devolverá una falla a la aplicación del lado del cliente.
Solicitud (recaptcha_url, función (error,
resp, cuerpo) {
cuerpo = JSON.Parse (cuerpo);
Si (body.success! == indefinido y amp; & amp;! Cuerpo.
éxito) {
Respuesta de retorno. SEND ({"MENSAJE":
"Falló la validación de CAPTCHA"});
}
Respuesta.HEADER ("TIPO DE CONTENIDO",
"Aplicación / JSON"). Enviar (cuerpo);
});
});
El servidor HTTP de Express.js debe desatarse. Esto se logra mejor utilizando la aplicación APP. LISTEN. Tenga en cuenta que los puertos con un número que es más pequeño que 1024 están restringidos al usuario raíz en sistemas operativos unixoides: 3000 es, por lo tanto, una apuesta segura.
VAR Server = MyApp.Listen (3000, función () {
console.log ("escuchar en" + servidor.
Dirección (). Puerto);
});
Finalmente, nuestro formulario debe ponerse en contacto con el servidor local que se ejecuta dentro de Node.js. Esto se logra mejor al ajustar la cadena de acción, asegúrese de apuntar al destino a un dominio válido, especialmente si no utiliza un servidor local express.js.
& lt; Body & GT;
& lt; forman acción = "http: // localhost: 3000 / Tamstest" Method = "Post" & GT;
& lt; div class = "g-recaptcha" data-siteyy = "6lewmzguaaaaepswpvp6hlulnjxa_scwtwhyhge" & gt; / div & gt; / div & gt;
& lt; br / & gt;
Pruebas de nuestro sistema cliente-servidor requiere dos servidores debido a la verificación de origen de Google. Afortunadamente, Python proporciona un servidor HTTP rápido: úselo para proporcionar index.htm, mientras que Express.js se alistará para realizar la verificación de la respuesta devuelta.
Tamhan @ Tamhan-ThinkPad: ~ / NODESPACE / NODERVERIFICA $
Nodo index.js
Escuchando en 3000
Tamhan @ Tamhan-ThinkPad: ~ / NODESPACE / NODERVERIFICA $
Python3 -m http.server
Sirviendo HTTP en 0.0.0.0 Port 8000 ...
Cuando se ejecuta, marque la casilla de verificación y cumpla con los desafíos que Big G podría lanzarle. El servidor generalmente no exige mucho en términos de verificación, y procede a mostrar los contenidos que se muestran arriba.
Los ejemplos de Google ignoran el botón de envío del lado del cliente, ya que un atacante siempre puede hacer que reaparezca con un poco de javascript. Al deshabilitar la perilla de envío en relación con el CAPTCHA, no mejora la seguridad, tiene efectos positivos sobre la facilidad de uso. Comencemos a partir de deshabilitar el botón después de la puesta en marcha.
& lt; forman acción = "http: // localhost: 3000 / Tamstest" Method = "Post" & GT;
& lt; div class = "g-recaptcha" data-siteyy = "6lewmzguaaaaepswpvp6hlulnjxa_scwtwhyhge" & gt; / div & gt; / div & gt;
& lt; br / & gt;
& lt; Entrada Tipo = "Enviar" valor = "Enviar" Discapacitado y GT;
& lt; / FORK & GT;
Siguiente, se debe agregar un manejador de eventos. La API CAPTCHA de Google lo invocará cada vez que el usuario pasara un intento de verificación de su punto de vista del lado del cliente.
& lt; html & gt;
& lt; cabeza y gt; . . .
& lt; script & gt;
Función ONDCFired (valor) {
console.log (valor);
}
& lt; / script & gt;
& lt; / cabeza y gt;
& lt; cuerpo y gt;
& lt; forman acción = "http: // localhost: 3000 /
Tamstest "Method =" Post "& GT;
& lt; div class = "g-recaptcha" data-siteykey = "6lewmzgaaaaaepswpvp6hlulnjxa_scwtwhyhge" Data-Callback =
"OndCfired" & GT; & Lt; / DIV & GT;
Google no limita los desarrolladores a los elementos de recapacidad de desove durante la carga de la página. los hacer() El método encontrado en la API de reCAPTCHA le permite designar uno o más & lt; div & gt; Etiquetas en el sitio web que se transformarán en widgets de recaptcha.
var mycallback = Función (Val) {consola.
log (val); };
grecaptcha.render (
document.getlementsbyid ('My-ID'),
{
devolución de llamada: mycallback,
LEARKEY: MYSITEKEY
});
Con eso, se mantiene un problema principal. El botón de envío debe volver a habilitar cuando el evento de clic proporcionado por ReCAPTCHA llega a nuestro código de solicitud. Cargar jQuery en un ejemplo tan simple es innecesario, así que retrocede a un poco de javascript simple.
& lt; script & gt;
Función ONDCFired (valor) {
document.getelementbyid
("Botón"). Deshabilitado = falso;
}
& lt; / script & gt;
& lt; type = "enviar" id = "botón"
valor = "Enviar" Discapacitado y GT;
Google no puede almacenar datos de respuesta a los desafíos para siempre. Debido a eso, los tiempos de verificación fuera bastante rápidos, de forma predeterminada, nuestro programa no se encuentra sobre eso. Afortunadamente, la API contiene un campo adicional que se puede usar para notificar.
Función ONDCEXPired (valor) {
document.getelementbyid ("botón").
discapacitado = verdadero;
}
& lt; DIV clase = "G-recaptcha" Data-Siteykey = "6lewmzguaaaaeepswpvp6hlulnjxa_scwtwhyhge"
data-callback = "ONDCFired" caducado por datos-callback = "ondcexpired" & gt; & lt; / div & gt;
Google presentó recientemente una tercera versión de la API de ReCAPTCHA, que no requiere una interacción con el usuario explícito. En su lugar, simplemente lo carga durante la inicialización de la página: el código supervisa automáticamente el comportamiento del usuario que se ejecuta Wild en el sitio web.
& lt; script src = "https://www.google.com/recaptcha/api.js?render=recaptcha_site_key" & gt; & lt; / script & gt;
& lt; script & gt;
grecaptcha.ready (función () {
grecaptcha.execute ('recaptcha_site_key',
{Acción: 'Página de inicio'}).
entonces (función (token) {
...
});
});
& lt; / script & gt;
Los beneficios complementarios de datos adicionales sobre la acción que se realiza en el sitio web. El fragmento que acompaña a este paso anunciará que el usuario visite actualmente su página de inicio. Se puede encontrar más información sobre la API en la documentación.
& lt; script & gt;
grecaptcha.ready (función () {
grecaptcha.execute ('recaptcha_site_key',
{acción: 'Página de inicio'});
});
& lt; / script & gt;
Únase a nosotros en Rich Mix, Shoreditch el 26 de septiembre para generar CSS, una conferencia a medida para los diseñadores web que le presentan el diseño creativo de Bloq, Net y Web. Reserve su boleto de avión antes del 15 de agosto en www.generateconf.com [sesenta y cinco] .
Este artículo se publicó originalmente en número 287 de la revista Creative Web Design Design Diseñador web . Comprar emito 287 aquí [sesenta y cinco] o Suscríbete al diseñador web aquí [sesenta y cinco] .
Artículos relacionados:
[dieciséis] En prácticamente, cada sitio ahora está construido con al menos un diseño web receptivo. La forma en que estructuramos ..
[dieciséis] Reaccionar nativo es una plataforma que le permite construir aplicaciones móviles nativas usando JavaScript. Com..
[dieciséis] El estilo de arte del videojuego de supervivencia en primera persona. Oscuro oscuro Puede ser engañosamente di..
Página 1 de 2: Página 1 Página 1 Página 2 Este taller le presen..
[dieciséis] Una de las cosas clave que trabajan en CGI debe proporcionar es mayor precisión. Sin embargo, es sorprendente lo difícil..
[dieciséis] Gouache es más indulgente que la pintura de acuarela, pero las decisiones que hagas temprano todavía pueden afectar el r..
[dieciséis] La mejor ciudad es una ciudad ocupada, pero ese ambiente ocupado no es una cosa fácil de capturar con éxito. Sin embargo..
[dieciséis] Las plataformas de cinta son bastante comunes en Arte 3d Plataformas de producción en estos días. Tienen un c..