Captcha PHP: Securimage

  • Por
  • 16 de enero de 2009
  • Valoración:
  • 8 Comentarios
  • PHP, Scripts en PHP
Una de las captchas de PHP más completas, gratuita y fácil de integrar en las aplicaciones PHP.
Vamos a comentar y a dar las primeras notas para integrar una captcha para PHP llamada Securimage, además de ofrecer algún truco interesante, venido de nuestra experiencia en el uso de este sistema, ya que es la captcha que utilizamos en DesarrolloWeb.com.

Lo cierto es que es un sistema que se puede integrar en pocos minutos y con bastante facilidad, dado que tiene una documentación completa que ofrece desde su propia página web, además de un minitutorial para comenzar a usar el sistema rápidamente. Claro que la documentación está en inglés, con lo que la vamos a traducir libremente en este artículo y de paso ampliarla con algún detalle adicional.

Qué es Securimage

Securimage es un script de código abierto, gratuito y libre de uso, que sirve para integrar una Captcha en sistemas PHP. Una captcha es una imagen de confirmación humana, que sirve para saber que es una persona la que está escribiendo un formulario y no una máquina. Seguro que habremos visto cientos de captchas en formularios de páginas web, que nos obligan a escribir el texto de una imagen en un campo, que tiene que coincidir con lo que está dibujado, para que el formulario se envíe correctamente.

Podéis encontrar este sistema de Captcha en http://www.phpcaptcha.org/

Podemos ver esta captcha funcionando en el propio formulario de contacto de DesarrolloWeb.com, así que no vamos a dejar de momento un ejemplo del script en funcionamiento. De todos, el ejemplo en funcionamiento en el propio sitio de Securimage tiene integradas más funcionalidades que nosotros ni siquiera usamos, así que podéis verlo en marcha también en http://www.phpcaptcha.org/try-securimage/

Requisitos para instalar esta Captcha PHP

Los requisitos para instalarla son tener PHP (son válidas las versiones 4 ó 5 de PHP) y la librería GD. Eso es lo básico, que casi todos los sistemas actualmente lo tienen, puesto que a partir de determinada versión de PHP 4, las librerías GD están instaladas de manera predeterminada.

Para quien no sepa que es la librería GD hay que decir que son un juego de funciones para manipulación de imágenes, es decir, para la creación de ficheros gráficos en varios formatos, desde PHP y de manera dinámica. Nosotros hemos hablado sobre GD en el manual de las librerías de gráficos GD.

Además hay otro requisito opcional, para que funcione Securimage con todas sus funcionalidades. Es tener instalado FreeType, que es un motor para trabajo con fuentes TTF. Este requisito es opcional, porque la Captcha PHP puede funcionar sin él, aunque no utilizará la parte de fuentes True Type, para configurar el texto de la imagen con distintas fuentes. En este caso simplemente se generá un tipo de fuente muy fea, pero legible.

Aparte necesitaremos que nuestro PHP tenga soporte para sesiones, algo totalmente básico que tienen todos los PHP por lo general.

Instalación de la Captcha PHP paso a paso

Ahora vamos a dar una serie de pasos para instalar la captcha PHP con una configuración básica, pero suficiente para disfrutar de sus ventajas en la seguridad de los formularios.

Paso 1.- Instalar el script
Empezamos entrando el la página de la captcha y seleccionando la última versión disponible para descarga. Para instalarla tan solo tenemos que copiar los archivos en un directorio de nuestro servidor.

Paso 2.- Crear la imagen de la captcha
Tenemos que crear el código para mostrar la imagen de la captcha. Esto se incluye como cualquier otra imagen, únicamente poniendo en la ruta del archivo una URL del script PHP que genera la imagen.

<img src="/captcha/securimage_show.php" id="captcha" />

También debemos acompañar esa imagen con un input donde se va a escribir el texto que haya en ella.

<input type="text" name="captchacode" />

Paso 3.- Opcional... código para refrescar la imagen
Si se desea, se puede incluir el siguiente código para tener un botón que sirva para refrescar la imagen captcha, en caso que no se vea correctamente. Esto es util para incrementar la usabilidad del sistema, pero no imprescindible para el funcionamiento.

<a href="#" onclick="document.getElementById('captcha').src = '/securimage/securimage_show.php?' + Math.random(); return false">Refrescar la imagen</a>

Paso 4.- Comprobar la captcha al validar el formulario
Ahora tenemos que hacer unas modificaciones al script que valida el formulario que hemos creado con la captcha, para ver que fue enviado por un humano.

Lo primero es abrir la sesión en la página del formulario. (Que debemos hacer sólo si no habíamos abierto la sesión en otros lugares del código de la página)

<?php session_start(); ?>

Ahora debemos utilizar un código como este para validar la captcha:

//primero incluimos el script de securimage
include_once("captcha/securimage.php");
//creo un objeto securimage
$img = new securimage();
//valido el campo input del formulario donde se había escrito el texto de la imagen
$valido_captcha = $img->check($_POST['captchacode']);

En la variable $valid se tiene ahora un boleano, que se puede evaluar para saber si era o no correcto el texto de la capcha escrito en el formulario.

if ($valido_captcha){
   //todo correcto...
}else{
   //captcha no válida
}

Detalles adicionales del manejo y configuración de la captcha

Con esto hemos terminado con los pasos para empezar a trabajar con la captcha. Ahora veamos otros detalles interesantes para las personas que deseen integrarlas.

Para configurar la captcha tenemos que editar el archivo securimage_show.php, que está en el directorio donde subimos los scripts de Securimage.

En este archivo se crea la imagen que verán los usuarios con el texto. Podemos utilizar varios métodos y propiedades para configurar el aspecto de esta imagen.

Ahora vamos a ver una utilización particular que hemos configurado nosotros:

//creamos el objeto securimage
$img = new securimage();
//con esta línea indicamos que no queremos fuentes True Type
$img->use_gd_font=true;
//Con esto indicamos el color de las líneas que camuflan el texto de la captcha
$img->line_color = "#FF00BF";
//con esto mostramos la captcha y la configuramos para que tenga un fondo de imagen
$img->show('fondocaptcha.jpg'); // alternate use: $img->show();

Quiero llamar la atención sobre el punto que hace uso de las fuentes GD:

$img->use_gd_font=true; Este paso nos puede evitar el requisito de disponer del componente FreeType, por si acaso nuestro servidor no lo tiene configurado. La captcha entonces se mostrará con una fuente creada por el propio GD, que también es suficiente para nuestros cometidos.

Otro detalle que queremos apuntar es la llamada al método show, que indicamos un parámetro con un nombre de archivo de una imagen. Esa imagen se utilizará como fondo para la captcha. La imagen de fondo, que en principio debe ser Jpg, debe colocarse en el mismo directorio donde se instaló Securimage.

Eso es todo! Esperamos que con este artículo de desarrollo web .com nuestros lectores puedan aprender por ellos mismos a instalar y configurar una captcha en PHP.

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.

Comentarios

david

06/8/2009
mensaje validacion en la misma pagina
Hola, el script me funciona perfectamente pero tengo una pregunta. ¿Como puedo hacer para que el mensaje de "codigo correcto" y "falta insertar el codigo" me aparezcan en la misma pagina, encima del formulario tal i como tienen ustedes en esta misma pagina?
Si me pueden costestar les estaré muy agradecido.
Muchas gracias.

Saludos.

Salvador

08/8/2009
Necesito ejemplos de captcha que contengan checkbox
Hola, gracias por haber traducido el tutorial, estuve buscando por nucho tiempo ejemplos de captcha pero que en el formularios tengan cgeckbox pues me urge pero no he encontrado, haber si me puede ayudar o si no colocando un ejemplo de como gestionar array de checkbox en formularios checkbox gracias

nicolas

16/9/2009
barabaro viejo
no sabes como me tenia este tema y me has solucionado mi problema al cerar fuentes con gd


saludos

Irantzu Leunda

01/10/2009
captcha no se muestra la imagen
He seguido el tutorial, pero no se me muestra la imagen, que tengo que hacer?

Pavelaz

23/12/2009
Todo bien pero no muestra la imagen
yo tambien he seguido el tutorial, pero no se me muestra la imagen, que tengo que hacer?

nico

13/8/2010
Solución a los 2 coments anteriores
Para lo que no pueden ver la imagen, cambien esto:

<img src="/captcha/securimage_show.php" id="captcha" />

por esto:

<img src="securimage/securimage_show.php" id="captcha" />

Al parecer miguel se confundió con la ruta de securimage_show.php.

Saludos

jdj

23/11/2011
$valido_captcha no recoge valor
$valido_captcha no me recibe valor. he puesto el código como teneis en la página pero mi variable siempre esta vacio.

mapwalls

28/10/2013
captcha no se ve
Hola, he creado la página http://www.cleatsi.com/ insertando el securimage en el formaulario pero no me aparece la imagen, la cuestión es que he colocado una prueba de la misma página en http://solucionesclap.com/ y funciona perfecto por lo que pienso que es un problema de hosting? que requerimiento podría ser el faltante o cual es el problemaa! no logro deducirlo. Gracias

Compartir