Animal Captcha 1.1: captcha gráfico con animales, script PHP
Español | Inglés
He aquí la primera versión pública del captcha gráfico que desarrollé para el formulario de registro de Blogs Teoriza.
- Prueba online! [en Español (de España) e Inglés]
Introducción:
Cuando me enfrenté al gran desarrollo del sistema de usuarios quise destacar de los demás formularios. Ante todo quería que fuese usable, sencillo y al grano. En definitiva minimalista, fiel a mi tendencia evidente.
Por supuesto el formulario de registro debe tener un control captcha, es decir, un obstáculo que solo es capaz de sortear un humano. Solo así puede estar protegido un formulario en Internet. Y aquí entra en juego este programa que hoy tengo el placer hacer público, muy fácil de implementar.
Descripción:
Animal Captcha es un pequeño programa en lenguaje PHP, orientado para su uso en páginas web, que permite adjuntar a un formulario una imagen aleatoria de un animal que cualquier humano conoce, y sin embargo un robot es incapaz de identificar.
Ventajas:
- Belleza: es más agradable ver una foto de un animal que un código alfanumérico.
- Rapidez: los usuarios ahorran tiempo, ya que se tarda mucho menos en identificar y escribir un animal conocido que un código aleatorio de 5 cifras, por ejemplo.
- Efectividad: los usuarios aciertan con más probabilidad, aportando una excelente experiencia.
- Seguridad: esta es la razón principal, en Internet hay desarrollos que consiguen resolver algunos captchas de códigos alfanuméricos, con cierto éxito. Sin embargo, ojalá pudiese una máquina identificar a un animal! Es imposible teóricamente. Aunque la aleatorizacion de imágenes, para que sean únicas, puede no ser firme.
- Multi-lenguaje: permite responder en varios idiomas, incluso varios nombres para un mismo animal (ejemplo: halcón y águila son equivalentes).
Implementación:
Animal Captcha está compuesto de 2 archivos PHP y 1 carpeta con imágenes de animales.
- animal-captcha.php - Devuelve una imagen aleatoria de un animal, y guarda en una sesión PHP el nombre del animal para comprobarlo posteriormente.
- animal-captcha-check.php - Define esta función PHP animal_captcha_check() que devuelve true si se ha acertado y false si es errónea, respecto a la sesión previamente creada al imprimir la imagen captcha.
- Imágenes: las fotos deben estar en formato .jpg, medir 120px y representar un animal común, fácil de identificar (de nivel de preescolar!). El nombre está formado por una serie de palabras sin espacios, separadas por guiones ‘-‘. Todas las estas palabras son las respuestas correctas. Ejemplo, cerdo-gorrino-pig.jpg Admite las respuestas: cerdo, gorrino o pig.
Ligerisimas por cierto, cada imagen ocupa 4kb tan solo. Está optimizado su consumo al mínimo, listo para usarse en importantes sitios web.
De esta forma se puede internacionalizar fácilmente o se pueden solventar animales que pueden ser nombrados de varias formas.
Cada imagen es difuminada aleatoriamente, de forma que cada imagen presentada es única.
Ejemplo:
- Test online. Pruébalo!
El código fuente de esta prueba también está incluido, para facilitar la comprensión a la hora de implementarlo.
Descargar:
- Animal Captcha 1.1 [120kb .zip] (03 Mayo 2008)
Animales en Español e Inglés.
Publicado bajo licencia Creative Commons, siendo esta página la fuente original. Cedo todos los derechos de utilización y modificación, como mejor se considere. El único derecho que quiero preservar es el de autoría y citación (cuando corresponda).
Changelog:
- 1.1 - Avance en la aleatorización de imágenes para dificultar la obtención de patrones que identifiquen la foto original del animal. Invulnerable (hasta que se demuestre lo contrario!) al test de bits y test de histograma.
- 1.0 - Versión inicial. Vulnerable a los test de bits y test de histogramas.
Notas extra: (aportaciones de usuarios, gracias!)
- Imágenes de hardware, para un foro de informáticos por ejemplo.
- Ideas de imágenes complementarias:
- Imágenes de deportes
- Imágenes de objetos (mesa, silla, sofá, tejado…)
- Imágenes de logotipos conocidos (ejemplo práctico)
- Banear IP temporalmente si se fallan 3 veces seguidas. Así se reduce un posible ataque por fuerza bruta.
- Implementarlo en forma de plugin para Wordpress.
- Crear varias representaciones del mismo animal, para reducir posibles equivocaciones.
- Eliminado el animal cerdo porque es, con diferencia, el animal con más nombres distintos que hay.
- Funcionan bien los nombres compuestos (nombres con espacios). Ejemplo: killer whale (orca).
Problemas conocidos:
- Si el lector no conoce el idioma en el que está configurado el captcha, no podrá resolverlo.
- Algunos animales pueden ser identificados con diferentes sinónimos (ejemplo: cerdo, gorrino, marrano, cochino) Va a ser difícil completar los nombres al 100%. Pero creo que pasa el aprobado cuando el 99% de niños de primaria sea capaz de resolverlo.
- Seria interesante aumentar el repertorio de imágenes hasta una centena al menos. Quizá habría que ampliar a objetos también.



