Escrito por Ruben Cantón el Wednesday, 17 de March del 2010 |
4 comentarios
Uno de los filtros antispam más comunes se conoce como Captcha y consiste en una imagen con una palabra escrita que el usuario humano debe escribir en un cuadro de texto para asà ponérselo difÃcil a los bots de SPAM. El proceso resulta molesto para el usuario pero puede ayudar a filtrar el spam y en algunos casos incluso a evitar una oleada que casi tumbe tu servidor.
Si estás pensando en colocar uno de estos módulos en tu web te aviso de que existen opciones de código abierto (open source) como Secureimage, un captcha en PHP open source que puedes descargarte en su página oficial.
Para instalar éste Captcha open source en tu web basta con que descomprimas el archivo en el directorio de la misma e introduzcas las siguientes lÃneas de código:
Primero, pon ésta lÃnea de código en donde quieras que se muestre la imagen con la palabra. Cuidado con la ruta de la imagen, ha de coincidir con la ruta en que se encuentra ese archivo en tu web.
<img id="captcha" src="/securimage/securimage_show.php" alt="CAPTCHA Image" />
Segundo, pon ésta otra lÃnea de código que será el cuadro en que el usuario deberá escribir la palabra. Ojo con la propiedad name que la necesitaremos luego.
<input type="text" name="captcha_code" size="10" maxlength="6" />
Opcionalmente tenemos la posibilidad de habilitar la opción de recargar imagen por si el usuario es incapaz de reconocer la imagen generada automáticamente. FÃjate en que la id de la imagen anterior ha de coincidir con lo que apunta el getElementById y en que nuevamente la nueva ruta de la imagen debe coincidir con el archivo en tu web.
<a href="#" onclick="document.getElementById('captcha').src = '/securimage/securimage_show.php?' + Math.random(); return false">Cargar otra imagen.</a>
Ahora que ya tenemos preparada la interfaz que utilizará el usuario, debemos colocar un código en el servidor que recogerá lo enviado por el usuario y analizará si es o no correcto. Hay varias formas de hacer esto, yo he empleado un postback sobre la misma página, por tanto, establezco un condicional que en caso de estar realizando un postback y ya que en esa página es el único formulario posible comprueba que todo sea correcto.
Dentro del postback hay que colocar las siguientes instrucciones. Ojo con session_start(); que debe ejecutarse antes de que se haya escrito ningún HTML, lo mejor es colocarlo a principio de toda la página pero puedes ponerlo más abajo siempre que te asegures de que no se ha escrito nada de HTML aún.
if( strtoupper( $_SERVER['REQUEST_METHOD'] ) == "POST" ) { // Es un postback
session_start();
include './ModCaptcha/securimage.php';
$securimage = new Securimage();
if ($securimage->check($_POST['captcha_code']) == false) {
// El código no es correcto
} else {
// EnvÃo email
}
}
Como ves, tras crear y cargar el objeto Secureimage comprobamos si el código introducido por el usuario es correcto, a partir de aquà te toca a ti realizar las distintas operaciones para mostrar el error o enviar el mensaje etc.
Si te interesa colocar otro diseño a la imagen generada tienes varias opciones en ésta galerÃa. Si quieres ver un ejemplo puedes pasarte por el formulario de contacto de mi web.