Evitar spam en formularios PHP


No hay cosa más molesta que crear un formulario en una página web (de contacto o de entrada de comentarios por ejemplo), y que se sature la página o el correo de mensajes de correo basura (o spam), sobre todo referentes a viagra, sex, lottery o rolex. La solución a esto son los captchas, pero a veces son demasiado complicados o antiestéticos para querer ponerlos en nuestra página. Con este sencillo tutorial veremos como engañar a los spambots mediante un código PHP

 

Como todos los recursos contra los spambots, funcionará hasta que se haga demasiado conocido y entonces encontrarán la forma de saltárselo, siguiendo la guerra de nuevo, pero al menos con este sistema, por ahora se reducen drásticamente los mensajes de spam.

 

Empezaremos con nuestro formulario PHP, vamos a hacer uno de ejemplo muy simple.

<form action="form.php" method="post">

<input name="nombre" type="text">

<input name="enviar" type="submit" value="Enviar" />

</form>

En este formulario, simplemente se introducirá un texto (en este caso un nombre) y se enviará a la dirección que le digamos en form.php.

 

A continuación pondremos otra caja de texto que será la que nos servirá para filtrar el spam. Le daremos un nombre que suela ser común en formularios en inglés, como pueda ser name, last_name, address o algo similar. Le pondremos un id que se llame igual que el elemento y la añadiremos al final de nuestro formulario.

<form action="form.php" method="post">

<input name="nombre" type="text">

<input name="enviar" type="submit" value="Enviar" />

<input name="address" type="text" id="address">

</form>

Ahora, crearemos en nuestra hoja de estilos CSS un estilo de tipo id que se llame address y que contenga los siguientes valores.

#address {display: none;}

Con esto lo que haremos es que la caja de texto para introducir el valor address no será visible para ninguna persona que entre en la página. El fundamento de esta tecnica se basa en que los spambots seguirán reconociendo que hay un campo extra para rellenar (aunque este no sea visible por CSS) y por lo tanto lo rellenará. Modificando nuestro archivo form.php, haremos que el formulario no se procese si este campo se ha rellenado. Por lo tanto accedemos a nuestro archivo form.php que debería ser más o menos así.

<?

$to = "xxx@xxx.com"; /*dirección a  la que queremos que se envíe la consulta */
$subject = "Nombre";
$nombre=$_POST[nombre];
$msg = "$nombre";
mail($to, $subject, $msg);
header("Location: xxx.html"); /*archivo donde queremos que vuelva al procesar el formulario, puede ser una pagina de agradecimiento por ejemplo */
exit();

?>

 Y ahora añadimos las siguientes líneas.

<?
if (!empty($_POST['name'])) {echo "No se admiten mensajes de spam";}
else{

$to = "xxx@xxx.com"; /*dirección a la que queremos que se envíe la consulta */
$subject = "Nombre";
$nombre=$_POST[nombre];
$msg = "$nombre";
mail($to, $subject, $msg);
header("Location: xxx.html"); /*archivo donde queremos que vuelva al procesar el formulario, puede ser una pagina de agradecimiento por ejemplo */
exit();
}

?>

De esta forma, el archivo form.php reconocerá si se ha rellenado el campo extra que está oculto, y si ha sido así, el formulario no se enviará, evitando que se reciba correo spam o que se publiquen comentarios de spam por ejemplo.

 

 

4
4 (2 votos)
 

Comentarios

Gracias por el aporte. Muy

Gracias por el aporte. Muy útil.

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
Valid XHTML 1.0 Transitional ¡CSS Válido!