Crear un captcha

Por el 27 de Enero de 2007

en: Sin categoría

Quién hoy en día no ha utilizado algún captcha ó Completely Automated Public Turing test to tell Computers and Humans Apart (Prueba de Turing pública y automática para diferenciar a máquinas y humanos), vaya una pequeña prueba con la que demostramos al sistema que somos una persona… el que siempre nos encontramos es aquel en el que a un usuario se le pide que introduzca un conjunto de caracteres que se muestran en una imagen distorsionada generada por un pequeño script.

Esto evitará a nuestro sitio sufrir ataques de spam ya que la solución debe unicamente ser capaz de proporcionarla un humano.

Cómo dato anecdótico decir que se utilizaron en primera instancia en Yahoo! para validar a sus usuarios a la hora de solicitar una nueva cuenta de correo electrónico y poco a poco se fueron haciendo populares hasta llegar a convertirse casi imprescindibles.

Crear un captcha

Esta es la manera rápida de crear un captcha y no es otra que descargando uno ya hecho… en el siguiente punto explicaremos paso a paso cómo crear un captcha desde 0.

En esta página puedes encontrar dos buenos ejemplos de captchas unos de ellos el clásico en el cuál el usuario debe introducir un número y el otro uno un tanto alternativo en el cuál el usuario deberá buscar un cuadrado dentro de la imagen y clickear en él.

Ejemplo 1 (clickear el cuadrado)
Ejemplo 2 (introducir el código)

Descarga (ZIP, 12 KB)
Ver Código Fuente

Ya la elección es aquel que creas tú que mantiene una mejor relación seguridad-usabilidad.

Crear un captcha paso a paso (PHP)

Bueno los que hayais seguido leyendo hasta aquí es que quereis crear o aprender cómo funciona un captcha.

El funcionamiento es sencillo, se crea una cadena aleatoria que es escrita en una imagen y almacenada en una variable de sesión o cookie, el usuario la introducide en el formulario y esta es chequeada por el script.

6 pasos

1. Texto aleatorio
2. El texto se imprime en la imagen
3. Se almacena en alguna variable
4. Se muestra la imagen
5. El usuario introduce el código
6. Se valida los códigos (Usuario y almacenado)

Crear un texto aleatorio

<?php
//Inicio de sesión
session_start();

//Creación de cadena aleatoria
$md5 = md5(microtime() * mktime());

/*
No necesitamos 32 caracteres (generados anteriormente) y por lo tanto reducimos a 5
*/
$string = substr($md5,0,5);
?>

Creamos una imagen

<?php
/*
Creamos una imagen partiendo de una de fondo (debemos subir una imagen de fondo al servidor)
*/

$captcha = imagecreatefrompng(“./captcha.png”);

/*
Configuramos los colores usados para generan las lineas (formato RGB)
*/

$black = imagecolorallocate($captcha, 0, 0, 0);
$line = imagecolorallocate($captcha,233,239,239);

/*
Añadimos algunas lineas a nuestra imagen para dificultar la tarea a los robots
*/
imageline($captcha,0,0,39,29,$line);
imageline($captcha,40,0,64,29,$line);
?>

Insertamos texto en la imagen

<?php
/*
Ahora escribimos la cadena generada aleatoriamente en la imagen
*/
imagestring($captcha, 5, 20, 10, $string, $black);

/*
Encriptamos y almacenamos el valor en una variable de sesion
*/

$_SESSION['key'] = md5($string);

/*
Devolvemos la imagen para mostrarla
*/
header(“Content-type: image/png”);
imagepng($captcha);
?>

Chequeamos el valor dado por el usuario en el formulario

<?php
session_start();

if(md5($_POST['code']) != $_SESSION['key'])
{
die(“Error: Nos has introducido el codigo correcto”);
}else{
echo ‘Codigo Correcto, no eres una maquina ó al menos no lo pareces’;
}
?>

Bueno me he saltado algunos pasos cómo la creación del formulario… unicamente explico el código Php necesario para la creación del captcha los adornos HTML son cosa vuestra.

Estos son tres de los captchas más famosos que circulan por Internet:

Google



Windows Live



Paypal


Enlaces Relacionados

Generar passwords accesibles con Php
Codigo Fuente del generador de passwords en PHP
Ejemplo de ejecución del script
PHP y MySql una estrecha relación
5 cosas que no sabías hacer con PHP
Generar documentos OpenOffice con PHP
Nueva versión de Notepad++
Hola Mundo!
Identificar las consultas más lentas de MySql
Crea sencillas gráficas con MySql
Programar un script PHP para saber quién está en línea
Consejos para optimizar PHP
Editando en Opera páginas web en tiempo real

  • Entradas relacionadas:
  • No hay coincidencias

29 Respuestas a Crear un captcha

Avatar

Anónimo

28 de Enero de 2007 a las 7:21 am

y que es mejor… que opinais:

Poner un captcha o bien tal i como esta en esta web: por ejemplo, Problema matemático: ¿Cuál es el resultado de 10 + 7?

Avatar

manu

28 de Enero de 2007 a las 2:52 pm

a mi personalmente me parece mucho mejor un captcha, lo del problema matematico es para aquellos que tengan cualquier tipo de problema con la libreria gd

Avatar

Anónimo

29 de Enero de 2007 a las 5:52 am

Bueno entre problema matematico y captcha me quedo con captcha, siempre y cuando se diferencien bien los campos. Hay en paginas donde tengo que meter 3 veces loscampos para acertar.

Avatar

Jose

14 de Febrero de 2007 a las 4:26 pm

Mmmmm!
¿Qué pasa con los invidentes?

Avatar

misterd

22 de Mayo de 2007 a las 11:29 am

Hay algunos captchas para invidentes que se basan en plugins para audio, el jcaptcha por ejemplo tiene plugins de imagenes y sonidos y es LGPL.

Avatar

cosa

25 de Mayo de 2007 a las 4:20 am

Yo estoy intentando desarrollar el jcaptcha para invidentes pero no lo logro, alguien me puede hechar una mano?

Muchas gracias

Avatar

Gabriel

7 de Abril de 2008 a las 1:56 pm

Muchas gracias por este ejemplo. Lo que no entiendo es como se hace para mostrar la imagen captcha en el formulario. Podría alguien poner un ejemplo de formulario con la imagen ?

Gracias.

Avatar

DiamondAgel

10 de Diciembre de 2007 a las 6:02 am

Build Your Own Residual Income Business
Products to Make You Feel Great, a Strong Support Team, and a Revolutionary New, Lucrative Compensation Plan! Agel is a new company and is uniquely positioned to be the next giant in this area. The company has developed an entirely new category of products. Imagine being part of the next industry-changing innovation.

Video information http://www.biz.go-agel.biz/index.php?newlang=english&name=videoclips&op=CatView&cat=2
This video may change your life forever.

Click here to get more information http://www.biz.go-agel.biz/index.php?newlang=russian&newlang=english

Avatar

Anónimo

8 de Abril de 2008 a las 3:34 pm

Me parece muy claro tu tutorial, pero imcompleto…El que no sabe implementar un captcha, tampoco sabe incluirlo en su formulario…El que sabe, como tú, sobre implementar un captcha ¡No estaría leyendo este tutorial…

Avatar

CRACKER

9 de Octubre de 2008 a las 8:53 pm

PUES YO NO SABIA IMPLEMENTAR UN CAPTCHA, SALVO UNA PEQUEÑA PRUEBA POR UN TUTORIAL DE LA PAGINA DE DESARROLLO WEB…

PERO APRENDO RAPIDAMENTE Y SOY MUY CAPAZ DE INTUIR ALGUNAS COSAS, COMO TODO BUEN PROGRAMADOR NO SE NOS DIFICULTA CUANDO VEMOS CODIGO NUEVO…

ASI QUE DEJENME DECIR QUE ME PARECIO UN EXELENTE TUTORIAL, YA LE HICE ALGUNAS MODIFICACIONES Y LO ESTOY USANDO AHORA MISMO EN UN WEBSITE….

DE HECHO SI LE TUVE QUE MODIFICAR ALGUNAS COSAS, Y CREO QUE A LO QUE SE REFIEREN AL DECIR QUE ESTA INCOMPLETO ES PORQUE QUIEREN QUE LES HAGAN TODO…

COMO SIEMPRE LOS LEECHERS Y WEBONES TODO QUIEREN YA HECHO HASTA CON EL FORMULARIO PARA INCLUIRLO Y TODO !…

HAGAN USTEDES EL FORMULARIO E IMPLEMENTENLO, SE PUEDE HACER DE MIL MANERAS…

NO SEAN WEBONES QUE TODO QUIEREN YA HECHO !!

Avatar

Unlastest

19 de Febrero de 2008 a las 2:53 pm

Avatar

Demian

31 de Agosto de 2008 a las 3:54 pm

jajaja qué buen chiste!

Avatar

B1n4r10

2 de Octubre de 2008 a las 12:17 pm

Encima de que alguien se toma la molestia de explicar el codigo del captcha ya viene el listo de turno a decir que el tutorial esta incompleto. Hay que ver… si con las facilidades que ofrece este tutorial para desarrollar tu propio captcha no sabes como implementarlo para que aparezca mejor dedicate a otra cosa, porque esto no es lo tuyo. Y por supuesto, tu comentario de niñato, sobra. Mas haces tu el pinga posteando eso. APRENDE y DESPUES critica.

Muy buen tutorial, se agradece ;)
Bye!

Avatar

Anónimo

15 de Enero de 2009 a las 12:31 pm

Me parece que aquí hay ya mucho listillo. Yo esperaba que el tutorial estuviera mejor ya que dice… PASO A PASO. Yo estoy mirando páginas web donde aprenda a hacer un captcha pero claro, no se si la variable te la crea él. Todo eso va en el formulario?? en archivos aparte???
Es que si te pones a explicar algo es para el que no tiene ni idea no para el que ya lo sabe hacer.

Me parece de los peores explicando el captcha y punto.

Avatar

Miguel

24 de Octubre de 2008 a las 11:09 am

Este es un captcha que se puede implementar en ASP o en PHP, tiene efectos visuales en flash y tiene un programa para configurarlo. Es gratis.
http://www.icaptcha.com

Avatar

Arronobre

9 de Julio de 2008 a las 12:34 pm

tests time mashine

Avatar

neleste

8 de Julio de 2008 a las 8:03 am

Solo una pregunta, para que los comparas codificados en md5?, creo que es lo mismo comparados normales puesto que en este caso no ejerce ninguna medida de seguridad no?

Avatar

Alex

5 de Agosto de 2008 a las 5:41 am

Pues ponte a tirar líneas en vez de querer que te den todo hecho, yo creo que está bastante clarito el tema, no sé qué más quieres.

Avatar

esnai

28 de Junio de 2008 a las 4:29 pm

PUES ESO, QUE PARA PONER UN MANUAL INCOMPLETO MEJOR NOS QUEDAMOS CALLADITOS Y NO HACEMOS EL PINGA

Avatar

Anónimo

11 de Noviembre de 2008 a las 4:38 pm

¿como usa una computadora un ciego? ¿acaso ya hay monitores braile?

Avatar

Gilberto

2 de Marzo de 2009 a las 7:50 am

tiene toda la razón!! puede ahorrarse unos bytes innecesarios codificando a md5..! total el codigo no será almacenado ni nada por el estilo.!

Avatar

Anónimo

16 de Abril de 2009 a las 12:45 pm

Mira mr Prorgamnador, no todos somos programadores, algunos solo queremos aprender y un tutorial bien explicado ayuda….
inche dañado te sientes superior q pedo….

Avatar

Anónimo

15 de Mayo de 2009 a las 5:10 pm

reh

Avatar

Anónimo

13 de Junio de 2009 a las 6:38 am

Parece ser que desconoces el termino, o concepto “aleatorio”. Significa que puede ser cualquier término. Así que lógicamnte lo genera la máquina. ´

Lo de “listillos” pues… según quién y para quién.

Siempre en este medio las cosas se hacen de buena fé y con la idea de favorecer a cualquier prógimo, aunque sea un listillo. Pero dede la perspertiva de la humildad y la colaboración.

Saludos cordiales. (Espero haber contestado a tu pregunta)

Avatar

php

12 de Noviembre de 2009 a las 1:09 pm

Sin mas que decir sólo probar…

Avatar

Rodrigo

5 de Diciembre de 2009 a las 10:36 pm

Buen tutorial, para los que quieren hacer captcha desde cero, ya sea por que no confian en los que hay para descargar, o porque quieren aprender y personalizarlo.

Y para los que piden la inclusion del formulario para aplicar, solo 2 cositas:

1.- Este es un tutorial para desarrolladores web/ programadores , si no sabes hacer un formulario, primero vayan a la tutorial de HTML.
2.- Si quieren un formulario HTML…. hay varias aplicaciones captcha para descargar en internet con el formulario, pero si buscaran eso, no deberian estar aqui.

Saludos.

Avatar

Marcos

17 de Diciembre de 2009 a las 8:11 am

Gracias por la guía, está buenisima. Estoy desarrollando algo más grande y no tengo mucho tiempo para introducirme e ingeniarmelas para codificar.

Y los que esperan un tutorial paso a paso, diciendo que no son desarrolladores, entonces que hacen acá ….dejen el trabajo a los que si saben y asi mantenemos los trazos definidos.

El que quiere clases, que pague por los servicios…

Saludos y gracias por la guía

Avatar

Juan G

3 de Febrero de 2010 a las 8:39 pm

He realizado el formulario, en html, este codigo se inserta adentro del formulario, o se guarda en un archivo aparte?

Avatar

Fernando

8 de Febrero de 2010 a las 3:03 pm

Hola, gracias por el tutorial.
Me gustaría hacerte una consulta a ver si me pudieses ayudar:

Yo tengo implementado este código de php con un formulario en flash. Me funciona perfectamente pero da un error:
Entro en la web y me sale bien, genera la cantidad de numeros que yo le indico en el php. Todo bien pero si refresco la página me genera un número con más digitos, me imagino que 32, es como que al entrar por segunda vez a la web no acota en la función $string = substr($md5,0,5);
En mi caso es 7 en vez de cinco.

Pues nada si saben y me pueden ayudar se lo agradecería

Dejar un comentario