Regístrate!
GONZO Mia Intimidades Chat Ocio Hosting Tarot Alarmas Hoteles Poesías

Animal Captcha 1.1: captcha gráfico con animales, script PHP

Español | Inglés

caballoHe aquí la primera versión pública del captcha gráfico que desarrollé para el formulario de registro de Blogs Teoriza.


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.

elefantePor 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:

El código fuente de esta prueba también está incluido, para facilitar la comprensión a la hora de implementarlo.


Descargar:

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.

Páginas: « 1 [2]

  1. #51 Esta semana he visto… XXIII | Dondado - 3 May 2008 0:14

    […] acabaron las palabras indescifrables, los captchas de moda son fotos de animales. […]

  2. #52 posavasos - 3 May 2008 7:58

    Hace tiempo me guardé un enlace de un generador de CAPTCHAS con audio http://www.ejeliot.com/pages/2 utilizando Flite http://www.speech.cs.cmu.edu/flite/

    Probablemente haya más y mejores soluciones http://www.google.es/search?q=text+to+speech+php & http://www.google.es/search?q=audio+captcha+php, no estoy seguro de que los “recursos” (como comentabas en menéame) sean excusa :P

  3. #53 Jose - 3 May 2008 13:12

    Hola, te contesto a una pregunta del meneame sobre si una máquina podría identficar si una imagen es un gato. Pues sí que se podría llegar a reconocer que es un gato. Quien esté un poco al día de visión por computador (y yo lo estoy porque me dedico a ello) sabe que uno de los problemas en los que hace poco se han conseguido buenos resultados es el de la categorizacion de imagenes. Este problema consiste en identificar “clases” de imagenes (p. ej. gatos, perros, playa, nieve, bebés, etc). Me parece buena idea el captcha, sólo digo que en visión hay gente que está trabajando en problemas como “reconocer 15 tipos de animales en fotos”, y simplemente está bien que lo sepas. Te puedo pasar más información si quieres.

  4. #54 GONZO - 3 May 2008 14:51

    #53 Pero ¿crees que identificar un animal es menos costoso que identificar un código alfanumérico?

  5. #55 GONZO - 3 May 2008 16:39

    #48 Nache, una vez mas, te agradezco el “juego” que me estás dando… entre todos estamos mejorando esto! Ojalá llegue a buen puerto.

    Sobre tu ultimisimo código, lo he conseguido resolver añadiendo una rotación aleatoria y mejorando un poco los poligonos, salvo que pilles el pixel central (creo que no se puede con certeza), al menos tu ultimo test parece que lo pasa.

    http://www.teoriza.com/captcha/test-bits2.php?animal=random3.jpg (cebra)
    http://www.teoriza.com/captcha/test-bits2.php?animal=random1.jpg (gato)
    http://www.teoriza.com/captcha/test-bits2.php?animal=random4.jpg (elefante)
    http://www.teoriza.com/captcha/test-bits2.php?animal=random5.jpg (caballo)

    Los animales de prueba están incluidos en tu array de test.

    Luego el test de histograma, parece más aleatorio aún.

    http://www.teoriza.com/captcha/test-histogramas.php

    Con esto y un bizcocho… publico la versión 1.1 hasta que me lo volváis a pifiar! jeje entonces ya veremos que hacemos.

  6. #56 Manuu - 3 May 2008 19:15

    Hey man
    no dejes esto a descargar asi, vendelo
    Y si algun blog esta interesado se lo pudes regalar por mail.
    Envia cartas a ebay, hotmail, facebook y todo lo que se te ocurra
    Registralo, creo que se puede no?
    Saludo…

  7. #57 GONZO - 3 May 2008 19:36

    #56 Hola Manuu!

    Lo ultimo que haría es patentar esta idea. No me gustan las patentes de software. Además pienso que es un concepto bastante sencillo. Seguro que a más gente se le ha ocurrido esta misma idea, en otro punto del planeta.

    Y lo de liberar el código… le debo mucho al software libre :)

  8. #58 Nache - 3 May 2008 20:06

    Holap! Te recomiendo que no dejes fondo blanco (ni de ningun color) en la imagen cuando la rotas ya que asi se puede detectar perfectamente la rotación que le has dado y aplicar el test anterior teniendo en cuenta esa rotación. Por el contrario de fondo podrías usar otro animal del repertorio. Aun así voy a buscarle puntos flacos sin usar el metodo que te acabo de comentar.

    Esto se hace cada vez mas complejo, me gusta.

  9. #59 GONZO - 3 May 2008 20:56

    #58 Nache! Bien dicho, intente dejar la misma imagen como fondo, como si estuviera detrás de forma que se rellene el espacio en blanco… pero no me salió, lo dejo pendiente :P

    jjeje vaya, es justo lo que has comentado!

    A ver esos nuevos fallos!! Seguro que encuentras alguno :)

    Mientras tanto voy a intentar mover esto por el panorama en Inglés, a ver que tal.

  10. #60 Andres - 4 May 2008 9:32

    Este captcha con animales tiene un problema. Que tal si voy a blogs que estan en Ingles y quiero participar? Yo entiendo normal todo lo que leo, pero no me se los nombres de todos los animales en ingles….

  11. #61 GONZO - 4 May 2008 10:51

    #60 Bueno, es un inconveniente que tiene.

    Traducirlo a cualquier idioma es extremadamente facil, solo cambiando el nombre de los archivos… pero más no puedo hacer en ese sentido.

    Como el script es Español, puede que todos lo tengan traducido a este idioma, así que mejor para nosotros! :P

    De todas formas, se supone que si eres capaz de entender noticias en Inglés, acertarás casi todos los animales, son basicos, de preescolar! Frog, dog, butterfly.. etc :)

  12. #62 nick - 6 May 2008 0:09

    GONZO, ¿tienes preparada una nueva versión? ;)

  13. #63 GONZO - 6 May 2008 14:37

    #62 Enseguida! Tengo un plan, gracias a tu ultimo hackeo que me enviaste via email.

    Ayer estuve probandolo un poco, pero aun no lo tengo listo! En cuanto lo termine te lo enseño y publico lo que sería la 1.2 :P

    Un saludo!

  14. #64 Jose - 25 May 2008 12:14

    #54 (soy #53 de nuevo) No digo que te vayan a romper el CAPTCHA ni que no sea bueno, sólamente te estoy diciendo que hay gente que en visión por computador está trabajando en resolver problemas como “detéctame qué animal hay en esta foto” (con perspectiva, cambios de posición, iluminación, escala, etc) y están obteniendo buenos resultados, parece que no te interesa, pero deberías informarte sobre el tema. Es normal, dado que la informática es tan grande, que alguien que es especialista en un tema no sea consciente de todos los avances en otro tema. También, en este sentido (no sé si ya lo había mencionado) hace unos meses Microsoft sacó un CAPTCHA con fotos de perros y gatos, es posible que ya lo conozcas. No digo que sea mejor o peor, simplemente que si no lo conoces, estaría bien que lo hicieras más que nada por conocer el “trabajo relacionado”.

    Felicidades por esta currada que te estás pegando, esto sólo son un par de comentarios desde alguien que trabaja en reconocimiento de patrones, que espero que te sirvan.

  15. #65 GONZO - 25 May 2008 21:07

    #64 Gracias por la actitud critica de tu comentario. Es totalmente necesario si pretendo buscar la seguridad con este programa.

    Lo cierto es que he frenado un poco el desarrollo, porque estoy adelantando trabajo de Blogs Teoriza.

    Pero tengo pensado mantener actualizado este script. Actualmente creo que su seguridad es bastante aceptable, al menos para mis desarrollos.

    Logicamente si lo implementa Hotmail tal cual está… durará 24h maximo :)

    A ver si en el proximo avance consigo aleatorizar más aún las imagenes sin que queden muy borrosas.

  16. #66 MovZX Blog » Blog Archive » Solucionando «Animal Captcha» - 2 July 2008 0:21

    […] unos días nos enteramos, vía microsiervos y menéame entre otros,  de la aparición de Animal Captcha, una librería desarrollada en PHP para generar CAPTCHAs, basados en imágenes de animales. De […]

  17. #67 guarus - 13 July 2008 4:35

    que tal amigo, gracias por el codigo, de verdad esta interesante, ahora bien me gustaria que me orientaras sobre como podria hacer, para que al captcha que describes, se le adicione un caracter aleatorio a cada imagen y mostrar tanto el caracter como la imagen simultaneamente.
    y gracias por el aporte

  18. #68 farra - 29 July 2008 14:55

    en: serpiente-boa-culebra-snake.jpg

    te falto VIVORA…

  19. #69 FARRA - 6 August 2008 22:48

    cambia:
    session_start();

    por:

    if (!isset($_SESSION)) {
    session_start();
    }

    ya que si estas en una plataforma con sesion iniciada ya te puede dar error por iniciar 2 veces…

Páginas: « 1 [2]

(será privado)
(opcional)
44 queries. 0.119 seconds.