Captcha PHP: Animal captcha

  • Por
Animal captcha es script gratuito y código libre para Implementar un Captcha donde se le pide al visitante que realice el reconocimiento de diversos animales.
En este taller de PHP no vamos a realizar un script, sino a presentar e implementar un script realizado por otra persona que sirve para hacer las veces de captcha. En diversos artículos y talleres de PHP hemos visto ya cómo implementar sistemas similares y en esta ocasión veremos un captcha que nos ha llamado la atención por su originalidad y por ser mucho más agradable que los captchas tradicionales.

Habría que comenzar por definir qué es un captcha. Pues no es más que un sistema informático para verificar que el usuario que está utilizando nuestra web es un humano y no una máquina o robot, que se suele hacer por medio del reconocimiento de una imagen. No obstante, lo más seguro es que los lectores conozcan perfectamente este concepto y si no es así, os recomendamos leer la FAQ Qué es un captcha.

Captcha por reconocimiento de fotografías de animales

Decíamos que este script nos ha parecido interesante por estar basado en el reconocimiento de fotos de animales, en lugar de la típica imagen de una palabra que se tiene que escribir. En el captcha se presenta una imagen con dos fotos de animales y los tenemos que escribir separados por un espacio. A simple vista resulta mucho más agradable y humano que los captchas tradicionales, y aunque el propio creador destaca varias ventajas, como todo en la vida, también presenta algunos inconvenientes.

Quizás sea interesante, llegado a este punto y antes de pasar a analizar el script, que visitemos la página del captcha, donde se puede acceder al demo así como a varias notas de versión y posibilidades:

http://gonzo.teoriza.com/animal-captcha

Entre las ventajas que supone este sistema destaca su seguridad, ya que a lo largo de diversas versiones el creador ha trabajado mucho para optimizar el captcha, con la ayuda de algunas personas que se han dedicado a buscarle los puntos débiles. Según dice, en esta última versión se tiene el 100% de seguridad, si utilizamos nuestras propias imágenes de animales en vez de las preestablecidas. Otros puntos fuertes son su originalidad y que resulta vistoso y amigable, como ya habíamos comentado, el hecho de reconocer bichos en lugar de palabras.

Por su parte, existe la desventaja de tener que conocer cada animal (aunque los que utiliza el sistema de entrada son fáciles de reconocer incluso para los más pequeños) y que además los animales pueden tomar nombres distintos, no sólo dependiendo del idioma en el que hablemos, sino porque en países distintos, o incluso regiones diferentes dentro de un mismo país, un animal puede denominarse popularmente con nombres distintos. Todo ello, sin hablar de las posibles faltas de ortografía que Animal Captcha no reconocería como válidas.

Nota: La descarga del captcha soporta nombres de animales tanto en español como en inglés.

Requisitos de Animal Captcha

La documentación de este captcha es más bien escueta. Lo cierto es que es tan sencillo que requiere pocas explicaciones, pero se le hecha en falta una especificación de requisitos. De momento, indicamos aquí un par de cosas que es necesario tener activas para que funcione el sistema de captcha:
  • Librería GD. Para poder manipular las fotos de los animales por medio de PHP.
  • Error reporting que no haga un reporte de los errores tipo "notice".
Nota: El nivel de reporte de errores en PHP se suele indicar en el php.ini en la variable de configuración error_reporting. En el típico servidor de desarrollo tendremos quizás activados todos los tipos de error y bajo esta circunstancia no funciona el captcha, al menos en la versión 1.5. Esto es porque durante su ejecución ocurren algunas advertencias de tipo "notice", que son especialmente fatales cuando se genera la imagen de los animales. Al generar el jpg directamente desde PHP, el código de la la propia imagen generada se mezcla con los notices y el resultado es que el navegador no la nuestra. Pero si desactivamos los notices, veremos que sí funciona. Si lo deseamos, podemos configurar nuestro php.ini para que no muestre los notices con:

error_reporting = E_ALL & ~E_NOTICE

Como en los servidores en producción suelen estar desactivados los notices, pues lo más seguro es que no haya problema alguno al ver el captcha en funcionamiento.

Además, el sistema en la actualidad usa alguna función PHP obsoleta (deprecated) que también habría que desactivar su advertencia para que no saliesen feos mensajes de error. Al menos esto es en la versión 1.5. Quizás en el futuro solventes estos problemas.

Uso del captcha

Como veremos a continuación, el uso de este captcha es realmente sencillo. Claro está que tendremos que descargarlo y colocar los archivos descomprimidos en nuestro servidor web. Estos archivos de descarga incluyen varios archivos PHP y un directorio con imágenes.

Una vez descomprimido hay un archivo PHP que tiene un ejemplo para verlo en funcionamiento llamado "example.php". Luego hay dos archivos importantes que implementan el sistema:

animal-captcha.php: Es un archivo que devuelve una imagen con las fotos de los animales a reconocer. Este archivo se puede poner en la ruta de una imagen (etiqueta IMG) y se mostrará directamente en nuestra página. Además, de manera transparente para nosotros, se creará una variable de sesión para guardar el resultado del captcha, que se deberá comprobar más tarde.

Nota: como Animal Captcha utiliza variables de sesión, no debemos de olvidarnos abrirla con la función PHP session_start().

animal-captcha-check.php: es un archivo que contiene una función que utilizaremos para comprobar si la captcha escrita por el usuario es correcta. La función en concreto se llama animal_captcha_check() y debemos pasarle como parámetro la cadena del captcha escrita por el usuario. Devuelve un boleano que indica si la validación fue o no correcta.

A continuación podemos ver el código más sencillo posible para poder probar este captcha por reconocimiento de animales.

<?php
session_start();
?>
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method=post>
   <img src="animal-captcha.php">
   <br>
   Escribe los nombres de los dos animales, separados por un espacio:
   <br>
   <input type=text name="textocaptcha">
   <input type=submit value="Enviar">
</form>
<?php
if ($_POST){
   //recibo algo de formulario, valido captcha
   require('animal-captcha-check.php');
   if (animal_captcha_check($_POST["textocaptcha"])) {
      echo "CORRECTO: captcha reconocido!";
   }else{
      echo "INCORRECTO: no has adivinado el captcha!";
   }
}
?>

Otros captchas que se pueden usar en PHP

Por último, os indicamos un par de referencias a un par de sistemas captcha más tradicionales que hemos comentado y utilizado en DesarrolloWeb.com:
  • Recaptcha: un sistema para captcha (recientemente adquirido por Google) que no requiere instalar nada en nuestro servidor y por lo tanto cuya implementación es extremadamente sencilla. El capcha está muy bien y resulta bastante seguro.
  • Securimage: un captcha bastante sencillo de usar, para PHP, que permite múltiples opciones de configuración.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir