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.
8 comentarios
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! 😛
Me alegro de que te sirva, es un captcha sencillo pero eficaz
e buen tute
muy bien
Se puede colocar todo en una pagina html, lo que pasa es que tengo el formulario de contacto en este tipo de pagina.
no he entendido ni una mierda yo kiero acer un captcha sin bajar cosas!!!
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?
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.