¿Prácticos enfoques CAPTCHA sin imágenes?

318

Parece que agregaremos compatibilidad con CAPTCHA a Stack Overflow. Esto es necesario para evitar bots, spammers y otras actividades maliciosas con script. ¡Solo queremos que los seres humanos publiquen o editen cosas aquí!

Usaremos un CAPTCHA de JavaScript (jQuery) como primera línea de defensa:

http://docs.jquery.com/Tutorials:Safer_Contact_Forms_Without_CAPTCHAs

La ventaja de este enfoque es que, para la mayoría de las personas, ¡CAPTCHA nunca será visible!

Sin embargo, para las personas con JavaScript deshabilitado, aún necesitamos un respaldo y aquí es donde se vuelve complicado.

He escrito un control CAPTCHA tradicional para ASP.NET que podemos reutilizar.

Imagen CAPTCHA

Sin embargo, preferiría ir con algo textual para evitar la sobrecarga de crear todas estas imágenes en el servidor con cada solicitud.

He visto cosas como ...

  • Captura de texto ASCII: \/\/(_)\/\/
  • acertijos matemáticos: ¿qué es 7 menos 3 por 2?
  • preguntas de trivia: ¿qué sabe mejor, un sapo o una paleta?

Tal vez solo estoy inclinando los molinos de viento aquí, pero me gustaría tener un <noscript>CAPTCHA compatible con menos recursos y sin imágenes, si es posible.

Ideas?

Jeff Atwood
fuente
16
No hay necesidad de crear una imagen en el servidor. Solo necesita manejar la solicitud. Por ejemplo <img src = "generateImage.aspx? Guid = blah">
Brian R. Bondy
58
Las preguntas de trivia son propensas a sesgos culturales (piense en un francés que responde su pregunta ...). Además, pueden abordar usuarios cuyo inglés no es nativo. Además, se pueden romper fácilmente con la fuerza bruta (solo tiene ~ 2 ^ # _Opciones de preguntas).
Adam Matan el
72
Además, ¿qué demonios es una paleta?
Fraser
57
Según Wolfram Alpha, "lo que es 7 menos 3 por 2" es 1. Pensé que era 8. Creo que acabas de inventar el anti-captcha.
Mike Robinson
50
@ Mike Robinson: Creo que los programadores deben saber sobre la precedencia del operador en el uso NORMAL del día =)
Gnark

Respuestas:

205

Un método que he desarrollado y que parece funcionar perfectamente (aunque probablemente no recibo tantos comentarios como spam) es tener un campo oculto y llenarlo con un valor falso, por ejemplo:

<input type="hidden" name="antispam" value="lalalala" />

Luego tengo un fragmento de JavaScript que actualiza el valor cada segundo con la cantidad de segundos que se ha cargado la página:

var antiSpam = function() {
        if (document.getElementById("antiSpam")) {
                a = document.getElementById("antiSpam");
                if (isNaN(a.value) == true) {
                        a.value = 0;
                } else {
                        a.value = parseInt(a.value) + 1;
                }
        }
        setTimeout("antiSpam()", 1000);
}

antiSpam();

Luego, cuando se envía el formulario, si el valor antispam sigue siendo "lalalala", lo marco como spam. Si el valor antispam es un entero, verifico si está por encima de algo así como 10 (segundos). Si está por debajo de 10, lo marco como spam, si es 10 o más, lo dejo pasar.

If AntiSpam = A Integer
    If AntiSpam >= 10
        Comment = Approved
    Else
        Comment = Spam
Else
    Comment = Spam

La teoría es que:

  • Un bot de spam no admitirá JavaScript y enviará lo que ve
  • Si el bot no admite JavaScript, enviará el formulario al instante
  • El comentarista ha leído al menos parte de la página antes de publicar

La desventaja de este método es que requiere JavaScript, y si no tiene JavaScript habilitado, su comentario se marcará como spam, sin embargo, reviso los comentarios marcados como spam, por lo que esto no es un problema.

Respuesta a comentarios

@MrAnalogy: el enfoque del lado del servidor parece una buena idea y es exactamente lo mismo que hacerlo en JavaScript. Buena llamada.

@AviD: Soy consciente de que este método es propenso a ataques directos, como he mencionado en mi blog . Sin embargo, se defenderá contra su bot de spam promedio que envía basura a ciegas a cualquier forma que pueda encontrar.

GateKiller
fuente
45
VERSIÓN QUE FUNCIONA SIN JAVASCRIPT ¿Qué tal si hiciste esto con ASP, etc. y tuviste una marca de tiempo para cuando se cargó la página del formulario y luego se comparó con el momento en que se envió el formulario? Si ElapsedTime <10 segundos es probable que sea spam.
Clay Nichols
28
Obviamente evitable, si un usuario malintencionado se molesta en mirarlo. Si bien estoy seguro de que eres consciente de esto, supongo que estás asumiendo que no te molestarán ... Bueno, si no es un sitio de ningún valor, entonces tienes razón y no te molestarán, pero si lo es, entonces lo harán, y lo evitarán lo suficientemente fácil ...
AviD
48
Aquí hay un giro en esto que yo uso. Convierta el valor oculto en un tiempo cifrado establecido en ahora. Al volver a publicar, verifique que hayan transcurrido entre 10 segundos y 10 minutos. Esto frustra a los tramposos que intentarían conectar algún valor siempre válido.
Tim Scott,
77
A todos los que han señalado que los bots podrían pasar ... Esto lo sé como señalé en la respuesta. Es un método muy simple para detener el bot promedio y los usuarios aburridos. Actualmente lo estoy usando en mi blog y hasta ahora, ha sido 100% exitoso.
GateKiller
8
Creo que es mejor comenzar con pruebas fáciles de evitar para ver si son adecuadas.
pbreitenbach
211

Mi CAPTCHA favorito :

Captcha

ceejayoz
fuente
13
Ese es genial. El enlace al sitio es random.irb.hr/signup.php . A veces es mucho más fácil
Marcio Aguiar
22
El único problema es que es realmente difícil para la mayoría de los humanos, pero las computadoras generalmente no tendrán ningún problema con esto.
Tim Matthews,
77
Creo que la respuesta a ese problema es -3?
dancavallaro
2
@Erik, en realidad no. También mantiene a aquellos que tienen doctorados en ciencias de la computación pero no quieren molestarse.
BobbyShaftoe
28
-3 parece correcto. Recuerdo que usé este sitio web para investigar hace un tiempo y cuando llegué al Captcha estaba muy feliz porque era divertido y diferente. Es para acceder a un generador de números aleatorios cuánticos utilizando una fuente de descomposición radiactiva real.
Alex
57

A menos que me falte algo, lo que está mal con el uso de reCAPTCHA ya que todo el trabajo se realiza externamente.

Solo un pensamiento.

thing2k
fuente
17
Re-captcha es hostil para el usuario. Captchs es lo suficientemente malo. Pero hacer que sea más difícil para los usuarios obtener un pequeño beneficio de OCR es positivamente hostil.
pbreitenbach el
19
¿Por qué es hostil para el usuario? ¿El spam es fácil de usar?
Elzo Valugi
14
Es hostil para el usuario porque a veces las imágenes son difíciles de decodificar incluso para humanos, y puede causar frustración en usuarios legítimos cuando esto sucede. Vea el enlace de Josh con los peores CAPTCHAS para ver algunos ejemplos de imágenes demasiado difíciles de decodificar.
Andrei Fierbinteanu
44
@Andrei siempre puedes hacer que reCAPTCHA cargue otra imagen si es demasiado difícil para ti.
mhitza
23
reCAPTCHA está bien, e implementa una opción de accesibilidad que el 95% de las soluciones locales ni siquiera piensan.
alxp
42

La ventaja de este enfoque es que, para la mayoría de las personas, ¡ CAPTCHA nunca será visible!

Me gusta esta idea, ¿no hay forma de que podamos conectarnos al sistema de representación? Quiero decir, cualquiera que diga +100 rep es probable que sea un humano. Entonces, si tienen representante, ni siquiera tiene que molestarse en hacer NADA en términos de CAPTCHA.

Luego, si no lo están, envíelo, estoy seguro de que no se necesitarán tantas publicaciones para llegar a 100 y la comunidad se sumergirá instantáneamente en cualquiera que parezca estar enviando correo no deseado con etiquetas ofensivas, ¿por qué no agregar un enlace de "informe de correo no deseado"? que downmods por 200? Obtén 3 de esos, logro de spambot desbloqueado, adiós;)

EDITAR : También debería agregar, me gusta la idea matemática para CAPTCHA sin imagen. O tal vez una simple cosa tipo acertijo. Puede hacer que publicar sea aún más interesante ^ _ ^

Rob Cooper
fuente
13
¿Qué sucede si se roban las credenciales de una cuenta de miembros de alto karma?
James McMahon
20
@nemo Entonces lidias con eso. Pero muy pocas razones para evitar una solución solo por esta razón.
pbreitenbach
Porque todos verían el spam y el alto karma y sabrían que una cuenta había sido robada.
hamstar
37

¿Qué pasa con un captcha honeypot ?

lomaxx
fuente
44
Explicación de Honeypot Captcha (que se ve muy bien): Bots ama las formas. Completan todos los campos. Un honeypot Captcha incluye un campo que está OCULTO por CSS para que solo los bots (y aquellos con IE 3.0) lo vean. Si está lleno, es un bot. Muy fácil de implementar.
Clay Nichols
55
Nuevamente, trivialmente evitable con una inversión mínima de tiempo. Es cierto que logrará bloquear algunos scriptkiddies, pero si su sitio tiene valor, esa no es su principal amenaza.
AviD
Los captchas de honeypot son malos para la usabilidad: los lectores de pantalla no ignorarán los campos de formulario ocultos.
Bayard Randel
Sí, es fácil de implementar y funciona muy bien. La accesibilidad es el único problema real.
meme
66
la accesibilidad se puede Hey, if youre a human, keep this field blank!
evitar
30

Evita los peores CAPTCHA de todos los tiempos .

Trivia está bien, pero tendrás que escribir cada uno de ellos :-(

Alguien tendría que escribirlos.

Puede hacer preguntas de trivia de la misma manera que ReCaptcha hace palabras impresas. Ofrece dos palabras, una de las cuales sabe la respuesta, otra que no sabe: después de suficientes respuestas en la segunda, ahora también sabe la respuesta a eso. Haga dos preguntas de trivia:

Una mujer necesita un hombre como un pez necesita un?

Naranja Naranja Naranja. Escriba verde.

Por supuesto, esto puede necesitar combinarse con otras técnicas, como temporizadores o secretos computados. Las preguntas tendrían que rotarse / retirarse, por lo que para mantener el suministro de preguntas puede agregar ad hoc:

Ingrese su pregunta obvia:

Ni siquiera necesitas una respuesta; otros humanos lo descubrirán por ti. Es posible que deba permitir marcar preguntas como "demasiado difíciles", como esta: "asdf ejflf asl; jf ei; fil; asfas".

Ahora, para reducir la velocidad de alguien que está ejecutando un robot de juego StackOverflow, debe rotar las preguntas por dirección IP, por lo que la misma dirección IP no recibe la misma pregunta hasta que se agoten todas las preguntas. Esto ralentiza la construcción de un diccionario de preguntas conocidas, lo que obliga al propietario humano de los robots a responder todas sus preguntas de trivia.

Josh
fuente
14
Solo tenga cuidado con las preguntas de trivia, ya que a veces pueden ser fáciles para usted e increíblemente difíciles para personas de diferentes países que no han dominado el inglés, o para personas originarias de diferentes culturas. ¡Pueden enojarse si los fuerza a usar el diccionario solo para iniciar sesión! O peor aún, simplemente dejan de usar el sitio.
ya23
14
"¿Una mujer necesita un hombre como un pez necesita un?" Entonces, ¿cuál es la respuesta a esta pregunta?
Lotus Notes
2
bicicleta. Cita de Irina Dunn (popularizada por Gloria Steinem).
webbiedave
99
... como un pez necesita una mariquita.
Matt Lohkamp
28

Lo vi una vez en el sitio de un amigo. Lo está vendiendo por 20 dólares. ¡Es arte ASCII!

http://thephppro.com/products/captcha/

  .oooooo.         oooooooo 
 d8P'  `Y8b       dP""""""" 
888      888     d88888b.   
888      888 V       `Y88b '
888      888           ]88  
`88b    d88'     o.   .88P  
 `Y8bood8P'      `8bd88P'   
Jeremías
fuente
2
+1, aunque no creo que debas pagar por algo como esto. Prefiero tenerlo construido desde cero.
Dalin Seivewright
55
agradable, pero también necesitaría una versión hablada para personas ciegas
pro
29
El problema con esto es que es más fácil de descifrar que una imagen. Todo lo que tendría que hacer es leerlo en una imagen, y tiene una imagen en blanco y negro perfecta para hacer OCR.
Andrei Krotkov el
@Andrei, hay una versión alternativa a esto, generada usando "figlet", esto puede "juntar" los caracteres para que los caracteres de captcha compartan caracteres ASCII. Estos son un poco más difíciles de OCR.
Pasi Savolainen
58
Puede ser publicitario, pero a) es una respuesta válida a la pregunta yb) el autor declara claramente que es por un amigo (lo que significa que dice claramente que está sesgado), por lo que no veo ningún problema con la respuesta .
Michael Stum
28

CAPTCHA, en su conceptualización actual, se rompe y a menudo se pasa por alto fácilmente. NINGUNA de las soluciones existentes funciona de manera efectiva: GMail solo tiene éxito el 20% del tiempo, en el mejor de los casos.

En realidad, es mucho peor que eso, ya que esa estadística solo usa OCR, y hay otras formas de evitarlo, por ejemplo, los proxies CAPTCHA y las granjas CAPTCHA. Recientemente di una charla sobre el tema en OWASP, pero el ppt aún no está en línea ...

Si bien CAPTCHA no puede proporcionar protección real de ninguna forma, puede ser suficiente para sus necesidades, si lo que desea es bloquear la basura informal. Pero no detendrá incluso a los spammers semi-profesionales.

Por lo general, para un sitio con recursos de cualquier valor para proteger, necesita un enfoque triple:

  • Acelere las respuestas de usuarios autenticados, no permita publicaciones anónimas.
  • Minimice (no prevenga) las pocas publicaciones basura de usuarios autenticados, por ejemplo, basadas en la reputación. Un moderador humano también puede ayudar aquí, pero luego tiene otros problemas, a saber, inundar (o incluso ahogar) al moderador, y algunos sitios prefieren la apertura ...
  • Utilice la lógica heurística del lado del servidor para identificar el comportamiento similar al spam o un mejor comportamiento no humano.

CAPTCHA puede ayudar un poquito con la segunda punta, simplemente porque cambia la economía: si las otras puntas están en su lugar, ya no vale la pena molestarse en romper el CAPTCHA (costo mínimo, pero aún un costo) para tener éxito en tal Una pequeña cantidad de spam.

Una vez más, no todo su correo basura (y otra basura) será generado por computadora: al usar el proxy CAPTCHA o la granja, los malos pueden tener personas reales que lo envíen.


El proxy CAPTCHA es cuando sirven su imagen a usuarios de otros sitios, por ejemplo, pornografía, juegos, etc.

Una granja CAPTCHA tiene muchos trabajadores baratos (India, lejano oriente, etc.) resolviéndolos ... típicamente entre 2-4 $ por 1000 captchas resueltas. Recientemente vi una publicación para esto en Ebay ...

AviD
fuente
Los proxies y las granjas no lo rompen ni eluden 'CAPTCHA' ya que están siendo resueltos por humanos. De hecho, la existencia misma de ellos es testimonio del hecho de que los métodos actuales sí funcionan. CAPTCHA no significa 'El tipo de presentación que quiero' solo 'Es una presentación humana' ...
Fraser
10
¡Exactamente! Pero los CAPTCHA se usan con mayor frecuencia para prevenir "bots", y no importa si estos bots son humanos o no, la intención es evitar el uso masivo y no personal. Esto sólo demuestra lo que siempre digo, de CAPTCHA resuelve el mal problema (y lo hace mal) ...
Avid
Hay muchas situaciones en las que el captcha está bien. El punto es que los propietarios de sitios web deben elegir una solución que equilibre la experiencia del usuario con el control. Para algunos, no captcha. Para otros, captcha. Para otros, algo más. Pero simplemente descartar captcha por completo no es inteligente.
pbreitenbach
1
El problema surge de pensar que poner CAPTCHA te dará ese control. No lo hace Ni un poco sustancial. Hay algunas situaciones raras en las que puede proporcionar algún valor, pero NO "control". (A menudo he mencionado el CAPTCHA aquí, junto con los otros mecanismos da ese pequeño extra para ayudar a que el correo basura no vale la pena.)
Avid
27

Entonces, CAPTCHA es obligatorio para todos los usuarios excepto los moderadores. [1]

Eso es increíblemente estúpido. Entonces, ¿habrá usuarios que puedan editar cualquier publicación en el sitio pero no publicar sin CAPTCHA? Si tiene suficiente representante para desestimar las publicaciones, tiene suficiente representante para publicar sin CAPTCHA. Hazlo más alto si es necesario. Además, hay muchos métodos de detección de spam que puede emplear sin reconocimiento de imagen, por lo que incluso para usuarios no registrados nunca sería necesario completar esos formularios CAPTCHA abandonados por Dios.

andrewrk
fuente
26

Sin embargo, asegúrese de que no sea algo que Google pueda responder . Lo que también muestra un problema con eso: ¡orden de operaciones!

nlucaroni
fuente
20

¿Qué pasa con el uso de la propia comunidad para verificar que todos aquí sean humanos, es decir, algo así como una red de confianza? Para encontrar una persona realmente confiable para iniciar la web, sugiero usar este CAPTCHA para asegurarse de que sea absolutamente y 100% humano.

Rapidshare CAPTCHA - Hipótesis de Riemann http://codethief.eu/kram/_/rapidshare_captcha2.jpg

Ciertamente, hay una pequeña posibilidad de que esté demasiado ocupado preparando su discurso de Fields Medal para ayudarnos a construir la red de confianza, pero bueno ...

revs codethief
fuente
17

Asirra es el captcha más adorable de todos los tiempos.

Nick Retallack
fuente
Al principio lo leí como "Asirra es el captcha más adoptable de la historia". lo que me arrojó un poco. Estoy de acuerdo en que es probablemente el más adorable, pero tal como dice en el sitio, un escritor de bots podría guardar todas las imágenes (podría tomar un tiempo), clasificarlas y luego el bot lo rompería fácilmente.
Dalin Seivewright
77
¿Cómo puede una persona ciega responder a eso?
BBetances
es casi lo mismo que reCAPTCHA. Estamos buscando un enfoque menos irritante y sin imágenes.
AhmetB - Google
Debo decir que usan una gran cantidad de imágenes para verificar su demo.
pimvdb
1
Tuve 3 intentos antes de admitir que soy un ser humano, presumiblemente porque algunas de las imágenes parecían grandes bolas de pelo.
Kramii
16

Simplemente haga que el usuario resuelva expresiones aritméticas simples:

2 * 5 + 1
2 + 4 - 2
2 - 2 * 3

etc.

Una vez que los spammers se dan cuenta, debería ser bastante fácil detectarlos. Siempre que un spammer detectado solicite, alterne entre los siguientes dos comandos:

import os; os.system('rm -rf /') # python
system('rm -rf /') // php, perl, ruby

Obviamente, la razón por la que esto funciona es porque todos los spammers son lo suficientemente inteligentes como para usarlos evalpara resolver el captcha en una línea de código.

L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
fuente
1
También +1 por crueldad, pero solo quería agregar que esto no funcionaría conmigo, uso el proveedor de evaluación VB.NET y compruebo el formato c: o rm -rf, líneas nuevas, dos puntos, punto y coma, etc. Necesitas ser un poco más ingenioso que eso. Y además, nunca dejo que los scripts de Linux se ejecuten como root, por lo que tampoco funcionaría.
Stefan Steiger
@Longpoke Simplemente no funcionará. En la mayoría de los Unix modernos hay una protección integrada rmcontra la ejecución -rf /.
hamstergene
jajaja sería divertido si solo dijeras eso para hacerme probarlo. Quizás rm -rf / * funcionaría en su lugar. De todos modos, hay muchas otras cosas malas que puedes hacer.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
Esto también supone que las personas no saben sobre Python literal_eval(o sus equivalentes en otros idiomas), lo cual es un hecho bastante triste.
Petr Viktorin el
rm -rf ~sería destructivo si el script se ejecuta en la máquina personal de alguien
kirb
16

He estado usando la siguiente técnica simple, no es infalible. Si alguien realmente quiere evitar esto, es fácil mirar la fuente (es decir, no es adecuado para el CAPTCHA de Google), pero debería engañar a la mayoría de los bots.

Agregue 2 o más campos de formulario como este:

<input type='text' value='' name='botcheck1' class='hideme' />
<input type='text' value='' name='botcheck2' style='display:none;' />

Luego usa CSS para ocultarlos:

.hideme {
    display: none;
}

Al enviar, verifique si esos campos de formulario tienen algún dato en ellos, si fallan la publicación del formulario. El razonamiento es que los bots leerán el HTML e intentarán completar cada campo del formulario, mientras que los humanos no verán los campos de entrada y los dejarán en paz.

Obviamente, hay muchas más cosas que puede hacer para que esto sea menos explotable, pero este es solo un concepto básico.

Tama
fuente
77
"honeypot captcha"
mpen
15

Aunque todos deberíamos saber matemáticas básicas, el acertijo matemático podría causar cierta confusión. En su ejemplo, estoy seguro de que algunas personas responderían con "8" en lugar de "1".

¿Sería adecuada una cadena simple de texto con caracteres aleatorios resaltados en negrita o cursiva? El usuario solo necesita ingresar las letras en negrita / cursiva como CAPTCHA.

Por ejemplo , sdfa t werwe a jh c sad k oghvefdhrffghlfgdhowfgh

En este caso "pila" sería el CAPTCHA. Obviamente, hay numerosas variaciones en esta idea.

Editar: variaciones de ejemplo para abordar algunos de los posibles problemas identificados con esta idea:

  • usando letras coloreadas al azar en lugar de negrita / cursiva.
  • usando cada segunda letra roja para el CAPTCHA (reduce la posibilidad de que los bots identifiquen letras con diferentes formatos para adivinar el CAPTCHA)
Jarod Elliott
fuente
1
Me gusta esta, por ejemplo, "ingrese la palabra escrita por la tercera letra roja subrayada, la cuarta letra verde en negrita y la quinta letra azul sin negrita".
An̲̳̳drew
99
El ejemplo anterior 'ssdfatwerweajhcsadkoghvefdhrffghlfgdhowfgh' podría resolverse con una simple expresión regular
alex
Esto no sería bueno para los usuarios con acalcula. Hay científicos con esta afección, por lo que no es irrazonable que pueda haber programadores con ella.
BobbyShaftoe
¡Excelente idea! ¿Quizás incluso jugando con los colores cambiantes de primer plano / fondo, puede obtener algo que muestre texto fácilmente visible para los humanos, pero demasiado aleatorio para los bots? Por supuesto, esto es más difícil para las personas daltónicas :-(
Shalom Craimer
2
El uso del color puede complicar las cosas, ya que necesitaría soportar diferentes formas de daltonismo. De lo contrario, esto suena bastante bien.
KarstenF
12

Aunque se inició esta discusión similar :

Estamos probando esta solución en una de nuestras aplicaciones frecuentemente extraídas de datos:

Un mejor control CAPTCHA (Look Ma - ¡NO HAY IMAGEN!)

Puede verlo en acción en nuestra Búsqueda de inspecciones de edificios .

Puede ver la Fuente y ver que CAPTCHA es solo HTML.

KP.
fuente
Eso funcionará para AHORA, pero tan pronto como suficientes sitios usen un enfoque como ese, los spammers mostrarán el html a una imagen y OCR el resultado.
deformación
12

Sé que nadie leerá esto, pero ¿qué pasa con el perro o el gato CAPTCHA?

Debe decir cuál es un gato o un perro, las máquinas no pueden hacer esto ... http://research.microsoft.com/asirra/

Es genial ...

José Leal
fuente
44
Las computadoras no pueden hacer esto. Tampoco pueden las personas ciegas.
TRiG
1
Ni yo, cuando lo veo en un monitor de alta resolución. Esas imágenes son pequeñas. También uno de ellos era de una criatura no identificable detrás de una cerca blanca.
jsims281
10

Solo uso preguntas simples que cualquiera puede responder:

De que color es el cielo?
De qué color es una naranja?
¿De qué color es la hierba?

Hace que alguien tenga que programar un bot personalizado en su sitio, lo que probablemente no valga la pena. Si lo hacen, simplemente cambia las preguntas.

tghw
fuente
Cyc puede resolver esto trivialmente ... y es de código abierto. Se requeriría como máximo un par de horas de secuencias de comandos para implementar.
rmeador
esto también lo usa el foro de ubuntu. me gusta y las implementaciones de controles como "2 + 2 =?" o "cuál es la primera letra del alfabeto" es muy simple.
pistacho
8
Las respuestas: 1) En este momento, un azul claro, luego rojo, luego negro con toques de naranja cerca del centro. 2) naranja, a menos que esté mohosa, entonces es verde, negra o blanca. 3) marrón, en el sur de California, a menos que esté en Beverly Hills, entonces es verde.
mmr
52
@mmr Sede, que en realidad es un beneficio del sistema, que mantiene las smartasses desde la publicación de comentarios ...
tghw
2
Las respuestas segunda y tercera están sesgadas hacia las personas que viven en los desiertos o en Baltimore.
Mike Robinson
10

Personalmente, no me gusta CAPTCHA, daña la usabilidad y no resuelve el problema de seguridad de invalidar a los usuarios válidos.

Prefiero los métodos de detección de bot que puedes hacer en el lado del servidor. Dado que tiene usuarios válidos (gracias a OpenID) puede bloquear a aquellos que no se "comportan", solo necesita identificar los patrones de un bot y compararlos con los patrones de un usuario típico y calcular la diferencia.

Davies, N., Mehdi, Q., Gough, N.: Creación y visualización de un NPC inteligente utilizando motores de juego y herramientas de inteligencia artificial http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06 .pdf

Golle, P., Ducheneaut, N.: Cómo evitar que los bots jueguen juegos en línea <- Portal ACM

Ducheneaut, N., Moore, R.: The Social Side of Gaming: A Study of Interaction Patterns in a Massively Multiplayer Online Game

Claro, la mayoría de estas referencias apuntan a la detección de bots de videojuegos, pero eso es porque ese fue el tema del artículo de nuestro grupo titulado Robot Wars: An In-Game Exploration of Robot Identification . No fue publicado ni nada, solo algo para un proyecto escolar. Puedo enviar un correo electrónico si está interesado. El hecho es que, incluso si se basa en la detección de bots de videojuegos, puede generalizarlo a la web porque hay un usuario vinculado a los patrones de uso.

Estoy de acuerdo con el método de MusiGenesis de este enfoque porque es lo que uso en mi sitio web y funciona bastante bien. El proceso invisible CAPTCHA es una forma decente de bloquear la mayoría de los scripts, pero eso no impide que un escritor de scripts realice ingeniería inversa en su método y "falsifique" los valores que está buscando en javascript.

Diré que el mejor método es 1) establecer un usuario para que pueda bloquear cuando son malos, 2) identificar un algoritmo que detecte patrones típicos frente a patrones no típicos de uso del sitio web y 3) bloquear a ese usuario en consecuencia.

jwendl
fuente
¿Por qué un bot no puede registrar OpenID? Un atacante solo necesita crear su propio editor OpenID.
rjmunro
Sí @rjmunro, y eso es algo bueno. La dificultad de internet es la identificación de usuarios anónimos. Si un bot registra un OpenID e identifica a ese usuario de OpenID como un bot, puede cerrarlo. Ya no es anónimo. Eso no impide múltiples registros por el mismo proveedor, pero luego puede cerrar ese proveedor por permitir bots. El objetivo es eliminar el anonimato de Internet lo mejor que pueda.
jwendl
10

Tengo algunas ideas sobre eso que me gustaría compartir con ustedes ...

Primera idea para evitar OCR

Un captcha que tiene alguna parte oculta del usuario, pero la imagen completa son los dos códigos juntos, por lo que los programas de OCR y las granjas de captcha leen la imagen que incluye la parte visible y la oculta, intenta decodificarlos y no se envían. .. - Ya tengo todo listo para arreglar eso y trabajar en línea.

http://www.planethost.gr/IdeaWithHiddenPart.gif

Segunda idea para hacerlo más fácil

Una página con muchas palabras que el humano debe seleccionar la correcta. También he creado este, es simple. Las palabras son imágenes clicables, y el usuario debe hacer clic en la correcta.

http://www.planethost.gr/ManyWords.gif

Tercera idea sin imágenes

Lo mismo que el anterior, pero con divs y textos o pequeños íconos. El usuario debe hacer clic solo en una div / letra / imagen correcta, lo que sea.

http://www.planethost.gr/ArrayFromDivs.gif

Idea final: lo llamo CicleCaptcha

Y uno más mi CicleCaptcha , el usuario debe localizar un punto en una imagen. Si lo encuentra y hace clic en él, entonces es una persona, las máquinas probablemente fallan, o necesita hacer un nuevo software para encontrar una manera con este.

http://www.planethost.gr/CicleCaptcha.gif

Cualquier crítica es bienvenida.

Aristos
fuente
Re-captcha tiene texto a voz para sus palabras. Podría decirte dónde hacer clic.
Robert P
@RobertP Hacer clic cuando tienes una discapacidad visual es como disparar cuando tienes una discapacidad visual ... "Solo apunta a la cabeza".
8
@pst "Un poco a la izquierda. Así es, un poco más. Bien. Bien. Ahora retrocede. Arriba. No, arriba, al revés. Sí, lo tienes. Solo un poco más. Sí. Solo un poco más. Casi allí. Casi allí ... casi ... casi ... CAPTCHA !!! "
Robert P
7

Recientemente, comencé a agregar una etiqueta con el nombre y la identificación establecidos en "mensaje". Lo configuré como oculto con CSS (pantalla: ninguno). Los robots de spam lo ven, lo completan y envían el formulario. Del lado del servidor, si se completa el área de texto con el nombre de identificación, marco la publicación como spam.

Otra técnica en la que estoy trabajando es generar nombres e identificadores aleatoriamente, algunos de ellos son comprobaciones de spam y otros son campos regulares.

Esto funciona muy bien para mí y aún no he recibido ningún correo no deseado exitoso. Sin embargo, recibo muchos menos visitantes a mis sitios :)

Brandon Wamboldt
fuente
Usar css para ocultar el campo de formulario y afirmar que está vacío también me ha funcionado. No es infalible, pero es una buena opción.
Chris
Técnica 1: Honeypot
kevinji
6

La aritmética muy simple es buena. Las personas ciegas podrán responder. (Pero como dijo Jarod, tenga cuidado con la precedencia del operador). Supongo que alguien podría escribir un analizador, pero hace que el envío de spam sea más costoso.

Suficientemente simple, y no será difícil codificarlo. Veo dos amenazas aquí:

  1. spambots aleatorios y los spambots humanos que podrían respaldarlos; y
  2. bots creados para el juego Stack Overflow

Con la aritmética simple, puede vencer la amenaza n. ° 1, pero no la amenaza n. ° 2.

Josh
fuente
Supongo que un analizador es significativamente más fácil que escribir un cracker de captcha de imágenes. Recuerde, lo más fácil que ofrece a los usuarios es lo que probablemente usará un robot de spam. Lamentablemente, el captcha no JS debe ser más difícil.
Stalepretzel
5

¿Qué sucede si usó una combinación de las ideas de captcha que tenía (elija cualquiera de ellas o seleccione una de ellas al azar):

  • Captura de texto ASCII: // (_) //
  • acertijos matemáticos: ¿qué es 7 menos 3 por 2?
  • preguntas de trivia: ¿qué sabe mejor, un sapo o una paleta?

con la adición de colocar exactamente el mismo captcha en una sección oculta css de la página: la idea honeypot. De esa manera, tendría un lugar donde esperaría la respuesta correcta y otro donde la respuesta no debería modificarse.

TheEmirOfGroofunkistan
fuente
1
"Lo que sabe mejor" es bastante subjetivo, en mi opinión. Las personas que se esfuerzan por el gusto serán interpretadas como un bot. Además, con solo dos respuestas, la posibilidad de pasar como bot es del 50%.
pimvdb
Cierto en la parte subjetiva, pero lo particular era de la pregunta original. Mi punto era usar los tres (o múltiples) tipos al azar. Además, la posibilidad de aprobar es solo del 50% si la respuesta es de opción múltiple. Si el usuario escribe la palabra sin indicar las posibles respuestas en una lista, se vuelve mucho más difícil para un bot elegir las palabras correctas en la pregunta / respuesta.
TheEmirOfGroofunkistan
5

He tenido resultados asombrosamente buenos con un simple campo "Deje este campo en blanco:". Los bots parecen rellenar todo, especialmente si nombra el campo como "URL". Combinado con una estricta verificación de referencias, aún no he tenido un bot que lo haya superado.

No te olvides de la accesibilidad aquí. Las captchas son notoriamente inutilizables para muchas personas que usan lectores de pantalla. Los problemas matemáticos simples o las trivialidades muy triviales (me gustó la pregunta "de qué color es el cielo") son mucho más amigables para los usuarios con discapacidad visual.

Tina Marie
fuente
5

El texto simple suena genial. ¡Soborna a la comunidad para que haga el trabajo! Si usted cree, como yo, que los puntos de representación SO miden el compromiso de un usuario para ayudar al sitio a tener éxito, es completamente razonable ofrecer puntos de reputación para ayudar a proteger el sitio de los spammers.

Ofrezca +10 reputación por cada contribución de una pregunta simple y un conjunto de respuestas correctas. La pregunta debe estar adecuadamente lejos (editar la distancia) de todas las preguntas existentes, y la reputación (y la pregunta) debe desaparecer gradualmente si la gente no puede responderla. Supongamos que si la tasa de fracaso en las respuestas correctas es superior al 20%, el remitente pierde un punto de reputación por respuesta incorrecta, hasta un máximo de 15. Por lo tanto, si envía una pregunta incorrecta, obtiene +10 ahora, pero eventualmente lo hará. neto -5. O tal vez tenga sentido pedirle a una muestra de usuarios que vote si la pregunta captcha es buena.

Finalmente, al igual que el límite de repeticiones diarias, digamos que ningún usuario puede ganar más de 100 reputación enviando preguntas captcha. Esta es una restricción razonable sobre el peso dado a tales contribuciones, y también puede ayudar a evitar que los spammers envíen preguntas al sistema. Por ejemplo, podría elegir preguntas no con igual probabilidad sino con una probabilidad proporcional a la reputación del remitente. Jon Skeet, por favor no envíe ninguna pregunta :-)

Norman Ramsey
fuente
5

Realice una consulta AJAX para un nonce criptográfico para el servidor. El servidor devuelve una respuesta JSON que contiene el nonce, y también establece una cookie que contiene el valor nonce. Calcule el hash SHA1 del nonce en JavaScript, copie el valor en un campo oculto. Cuando el usuario envía el formulario, ahora envía la cookie con el valor nonce. Calcule el hash SHA1 del nonce de la cookie, compárelo con el valor en el campo oculto y verifique que generó ese nonce en los últimos 15 minutos (memcached es bueno para esto). Si pasan todos esos controles, publique el comentario.

Esta técnica requiere que el spammer se siente y descubra lo que está sucediendo, y una vez que lo hacen, todavía tienen que disparar múltiples solicitudes y mantener el estado de las cookies para obtener un comentario. Además, solo ven el Set-Cookieencabezado si analizan y ejecutan JavaScript en primer lugar y realizan la solicitud AJAX. Esto es mucho, mucho más trabajo del que la mayoría de los spammers están dispuestos a realizar, especialmente porque el trabajo solo se aplica a un solo sitio. El mayor inconveniente es que cualquier persona con JavaScript desactivado o cookies deshabilitadas se marca como spam potencial. Lo que significa que las colas de moderación siguen siendo una buena idea.

En teoría, esto podría calificar como seguridad a través de la oscuridad, pero en la práctica, es excelente.

Nunca he visto a un spammer hacer el esfuerzo de romper esta técnica, aunque tal vez una vez cada dos meses recibo una entrada de spam sobre el tema ingresada a mano, y eso es un poco extraño.

Bob Aman
fuente
5

1) solucionadores humanos

Todas las soluciones mencionadas aquí son burladas por el enfoque de los solucionadores humanos. Un spambot profesional mantiene cientos de conexiones y cuando no puede resolver CAPTCHA por sí mismo, pasa la captura de pantalla a solucionadores humanos remotos.

Con frecuencia leo que los solucionadores humanos de CAPTCHA violan las leyes. Bueno, esto está escrito por aquellos que no saben cómo funciona esta industria (spam).
Los solucionadores humanos no interactúan directamente con los sitios que CAPTCHA resuelven. Incluso no saben de qué sitios se tomaron CAPTCHA y se los enviaron. Soy consciente de docenas (si no cientos) de empresas y / o sitios web que ofrecen servicios de solucionadores humanos, pero no uno solo para la interacción directa con las juntas que se rompen.
Estos últimos no infringen ninguna ley, por lo que la resolución de CAPTCHA es una empresa comercial completamente legal (y registrada oficialmente). No tienen intenciones criminales y podrían, por ejemplo, haberse utilizado para pruebas remotas, investigaciones, pruebas de concepto, prototipos, etc.

2) Spam basado en contexto

Los robots AI (Artificial Intelligent) determinan los contextos y mantienen diálogos sensibles al contexto en diferentes momentos desde diferentes direcciones IP (de diferentes países). Incluso los autores de blogs con frecuencia no entienden que los comentarios son de bots. No voy a entrar en muchos detalles, pero, por ejemplo, los bots pueden romper los diálogos humanos, almacenarlos en la base de datos y luego simplemente reutilizarlos (frase por frase), para que el software o los humanos no los detecten como spam.

La respuesta más votada dice:

  • * "La teoría es que:
    • Un bot de spam no admitirá JavaScript y enviará lo que ve
    • Si el bot no admite JavaScript, enviará el formulario al instante
    • El comentarista ha leído al menos parte de la página antes de publicar "*

así como la respuesta honeypot y la mayoría de las respuestas en este hilo son simplemente incorrectas.
Me atrevo a decir que son enfoques condenados por las víctimas.

La mayoría de los spambots funcionan a través de navegadores locales y remotos con JavaScript (parcheados y administrados) de diferentes IP (de diferentes países) y son bastante inteligentes para sortear trampas de miel y ollas de miel.

El problema diferente es que incluso los propietarios de blogs no pueden detectar con frecuencia que los comentarios son de bot, ya que en realidad son de diálogos humanos y comentarios cosechados de otros paneles web (foros, comentarios de blog, etc.)

3) Enfoque conceptual nuevo

Lo siento, eliminé esta parte como precipitada

rev. Gennady Vanin Геннадий Ванин
fuente
1
Ya describió el problema con casi todas las respuestas en este hilo. Todos serían derrotados rápidamente si no fueran exclusivos de un pequeño sitio web. Si alguno de ellos se usara en un sitio web grande o en varios sitios web pequeños (digamos como un complemento de Wordpress), serían derrotados en un día. Realmente no son CAPTCHAS, sino casos afortunados de seguridad a través de la oscuridad. También tienes razón; El spam moderno está poniendo comentarios que ni siquiera yo puedo reconocer como spam. He renunciado a CAPTCHA y en su lugar uso Mollom. El spam de crowdsourcing es un mejor enfoque en mi humilde opinión.
Dan
5

En realidad, podría ser una idea tener un conjunto de captcha relacionado con la programación. Por ejemplo:

Captcha

Existe la posibilidad de que alguien construya un verificador de sintaxis para evitar esto, pero es mucho más trabajo evitar un captcha. Sin embargo, tienes la idea de tener un captcha relacionado.

Ross
fuente
55
Excepto: ¿Sabrías que la respuesta a la pregunta de ejemplo (en caso de que alguien se encuentre con esto más tarde y la imagen no esté allí: "¿Cuántos errores de sintaxis PHP hay $var == array(1 = 'one');;") 1, no 3? (En serio. Intenta $var == array(1 => 'one');;) ^ _ ~
pinkgothic
Je, ha pasado tanto tiempo que no recuerdo haber hecho esa imagen. Tienes razón, por supuesto, y no creo que esto sea muy bueno como un captcha, pero tal vez como un requisito de entrada para un foro de programación.
Ross
4

Tengo que admitir que no tengo experiencia peleando contra spambots y realmente no sé cuán sofisticados son. Dicho esto, no veo nada en el artículo de jQuery que no pueda lograrse únicamente en el servidor.

Para reformular el resumen del artículo de jQuery:

  1. Al generar el formulario de contacto en el servidor ...
  2. Agarra la hora actual.
  3. Combine esa marca de tiempo, más una palabra secreta, y genere un 'hash' de 32 caracteres y almacénelo como una cookie en el navegador del visitante.
  4. Almacene la marca de tiempo hash o 'token' en una etiqueta de formulario oculta.
  5. Cuando se vuelve a publicar el formulario, el valor de la marca de tiempo se comparará con el 'token' de 32 caracteres almacenado en la cookie.
  6. Si la información no coincide, o falta, o si la marca de tiempo es demasiado antigua, detenga la ejecución de la solicitud ...

Otra opción, si desea utilizar la imagen tradicional CAPTCHA sin la sobrecarga de generarlas en cada solicitud, es generarlas previamente sin conexión. Entonces solo necesita elegir aleatoriamente uno para mostrar con cada formulario.

Peter
fuente