¿Cómo evitar SPAM en formulario de contacto?

Desde hace unos cuantos días hemos empezado a recibir correo basura o SPAM en formulario de contacto. Cansados de ello nos hemos puesto manos a la obra para solucionarlo.

Existen varias opciones para evitar el SPAM en formulario de contacto, una de las más conocidas es mediante el uso de CAPTCHA (Prueba de Turing pública y automática para diferenciar máquinas y humanos). Sin embargo, nosotros nos hemos decidido por modificar nuestro código PHP del formulario de contacto para evitar molestias a nuestros clientes.

La idea es añadir un campo nuevo al formulario de contacto que no será visible para nuestros clientes pero los robots si lo rellenarán e incluir una condición donde gestionamos el formulario de contacto para comprobar si dicho campo esta vacío, en caso de estarlo el formulario de contacto se enviará ya que no se trata de SPAM.

¡Vamos a ello!

En primer lugar, debemos acceder al documento donde hemos implementado el formulario de contacto. En nuestro caso «contacto.html» y añadimos

<label for=»spam» class=»verif»>¡Si ves esto, no llenes el siguiente campo!</label>
<input name=»spam» class=»verif» />

En este momento nos deben aparecer lo siguiente en nuestro formulario de contacto.


Ahora vamos a ocultarlo para que los clientes no puedan verlo, para ello debemos añadir el siguiente código en nuestro archivo «.css». Podéis llamar a la clase como prefiráis siempre y cuando lo cambies también en el código de arriba.

.verif { display: none; }

Por último, accedemos al archivo .php donde tratamos el formulario y le añadimos la siguiente condición

if ($_POST[‘spam’] != «») {
//Es SPAM, salimos sin enviar el formulario de contacto
exit();
}else{
//Es un cliente real, aquí incluimos el código de nuestro formulario
}

 

Cómo podemos ver nuestro formulario queda exactamente igual que al principio de incluir el código pero si consultáis el código fuente de la página podréis comprobar que existe el nuevo campo «spam» aunque oculto.

Formulario de contacto ChipToChip