La respuesta general es: puedes distinguir entre humanos y robots de spam según la voluntad de los desarrolladores de spambot de atacarte específicamente. Hay dos categorías de defensas esencialmente: distinción bot / humano y métodos para aumentar El coste de realizar ataques.
Distinguiendo bots de humanos
Ya se han propuesto muchas técnicas alternativas a CAPTCHA en la primera familia en Stack Exchange: ¿Existe una verdadera alternativa al uso de imágenes CAPTCHA?
No discutiré CUPTCHUs y CIPTCHIs y otros CAPTCHA "utilizables". Todos requieren que los humanos realicen una tarea para discriminarlos contra los robots. La mayoría de ellos probablemente se pueden romper si un adversario los ataca específicamente, y todos aún requieren perder el tiempo de su usuario: uno de ellos al menos se preocupa por la UX y es tolerable en algunos contextos de uso donde la diversión es un buen valor para la experiencia que estás creando.
Aumentar el costo de los ataques
Mi favorito personal es simplemente usar esquemas de identidad federados para que confíes en otros proveedores de identidad para confirmar si una IP específica tiene una cuenta con ellos (OAuth lo hace) y que esta cuenta tiene una cantidad significativa de valor ( para una cuenta de correo electrónico, ha recibido cantidades sustanciales de correo de otras cuentas que se supone que son reales *), nadie lo ha hecho todavía, que yo sepa.
Tenga en cuenta que este enfoque no ofrece protección contra dispositivos infectados en lugar de spambots, algo que es una preocupación creciente para sitios como Facebook donde se abusan de algunas cuentas reales y de confianza debido a extensiones de navegador maliciosas y comienzan a servir spam (sin URL, eso es rumores académicos).
Puede ser bueno tomar otros métodos, si tiene datos empíricos que demuestren que funciona para quienquiera que lo ataque. Puede reducir el número de cuentas creadas por IP por ej. semana / mes antes de servir un CAPTCHA si te enfrentas a robots de spam que reutilizan las mismas IP de botnets para crear cuentas en lugar de cambiar sistemáticamente. Puede hacer un aprendizaje automático de los detalles de los spambots existentes (forma del apodo, detalles rellenados) para identificar a un delincuente recurrente y usarlo como un filtro adicional para decidir si desea CAPTCHA o no. Por supuesto, eso requiere mucho de mantenimiento y solo funciona contra adversarios desmotivados, por lo que si eres una plataforma de millones de usuarios probablemente no tengas suerte. Los adversarios activos derrotan de manera trivial estos casos de aprendizaje automático (consulte las conferencias de AISec).
Los CAPTCHA son un no, en cualquier caso
Si cree que los CAPTCHA son absolutamente necesarios para algunos casos, aún debe implementar otros métodos para detectar a los delincuentes y solo atender a los CAPTCHA cuando tenga dudas sobre una cuenta. Es mucho más probable que un usuario real obtenga un CAPTCHA que un Spambot que tenga éxito en 4 o 5 controles diferentes.
* confiar en cadenas de confianza se abre a los ataques de sybil, pero me parecen mucho más fáciles de defender (SybilGuard y cualquier otra cosa que se haya publicado desde entonces) que p. ej. Detección directa automática de comentarios / revisiones y mucho más agradable para el usuario que el uso de CAPTCHAs (con hasta un 40% de tasas de error según la investigadora de usabilidad Angela Sasse).