Saltar a Comentarios

Jueves, Marzo 6th, 2008

Crear un captcha

Es habitual que se nos cuele mucho spam por formularios, y es que los spamers, suelen crear aplicaciones para enviar miles y miles de correos por formularios vulnerables, que envían copia del e-mail al autor, por ejemplo. Voy a iniciar un pequeño tutorial para crear un captcha, para “obligar a los usuarios a demostrar que son humanos”.

Primera Parte

<?php
session_start();

//Creamos una cadena aleatoria de caracteres
$md5 = md5(microtime() * mktime());

//Reducimos a 5 los caracteres
$string = substr($md5,0,5);
?>

Crear una imagen de fondo

<?php
//creamos un fondo de imagen y lo subimos, luego con la funcion imagecreatefrompng, la pasamos al captcha
$captcha = imagecreatefrompng("./imagencaptcha.png");

//podemos configurar los colores para las lineas
$black = imagecolorallocate($captcha, 0, 0, 0);
$line = imagecolorallocate($captcha,233,239,239);

//y para evitar las arañas le añadimos las lineas
imageline($captcha,0,0,39,29,$line);
imageline($captcha,40,0,64,29,$line);
?>

Insertamos el texto en la imagen

<?php
//insertamos la cadena creada aleatoriamente en la imagen
imagestring($captcha, 5, 20, 10, $string, $black);

//como no, encriptamos y almacenamos el valor de la cadena en una variabe sesion
$_SESSION['key'] = md5($string);

//devolvemos la imagen para crearla
header("Content-type: image/png");
imagepng($captcha);
?>

Comprobamos el valor que ingresa el usuario

<?php
session_start();

if(md5($_POST['code']) != $_SESSION['key'])
{
    //lo enviamos a la página de error
    echo "header('Location: error.php');";
}
else
{
    //lo enviamos a donde queríamos ha puesto bien el captcha
    echo "header('Location: buena.php');";
}
?>

La parte de la creación del formulario en este caso, es la más básica.


Entradas Relacionadas

8 Comentarios

  • Emilio
    Opera Opera 9.23 en Windows Windows XP
    Marzo 7th, 2008 at 19:20

    Excelente! Buscaba algo parecido porque lo que yo estoy haciendo ahora es justamente lo contrario: saltarme los captchas(o alguno de ellos) usando java. Gracias y felicidades por el blog!

    pd: Ahora tendré una bateria enorme de pruebas! :P

  • juanra
    Mozilla Firefox Mozilla Firefox 2.0.0.11 en Ubuntu Linux Ubuntu Linux
    Marzo 7th, 2008 at 21:17

    Me alegro de que te sirva, es un captcha sencillo pero eficaz

  • jose
    Safari Safari 532.0 en Mac OS Mac OS X
    Diciembre 14th, 2009 at 16:23

    e buen tute

  • hektor
    Internet Explorer Internet Explorer 8.0 en Windows Windows XP
    Junio 24th, 2010 at 15:32

    muy bien

  • Patricio
    Safari Safari 534.10 en Mac OS Mac OS X
    Noviembre 9th, 2010 at 15:50

    Se puede colocar todo en una pagina html, lo que pasa es que tengo el formulario de contacto en este tipo de pagina.

  • iguel
    Internet Explorer Internet Explorer 8.0 en Windows Windows XP
    Marzo 22nd, 2011 at 10:03

    no he entendido ni una mierda yo kiero acer un captcha sin bajar cosas!!!

  • Johel Arias
    Mozilla Firefox Mozilla Firefox 4.0.1 en Windows Windows NT
    Junio 10th, 2011 at 23:36

    Disculpa, estoy iniciándome en esto de php, pero no entiendo, cada vez que abres código con “<?php" es un archivo diferente o es el body de un mismo archivo?

  • juanra
    Safari Safari 534.30 en Mac OS Mac OS X
    Junio 13th, 2011 at 7:18

    Los 3 primeros son un mismo archivo (el que se enlaza en el src de la imagen). Y el cuarto es una comprobación posterior en otro.