Cómo evitar el spam en formularios usando la técnica Honeypot

Publicado el 10 de abril de 2018
Actualizado el 6 de julio de 2020

Los formularios web son esenciales para la captación de información. Son la primera vía de comunicación con tus usuarios o futuros clientes. El problema es que también actúan como la miel para las moscas del spam.

Si tienes un formulario implementado en tu sitio web, vas a tener spam. Da igual si es un formulario de contacto, un sistema de registro de usuarios o los comentarios en tu blog.

Los formularios web son esenciales para la captación de información. Son la primera vía de comunicación con tus usuarios o futuros clientes. El problema es que también actúan como la miel para las moscas del spam.

¿Cómo evitar el spam en formularios web?

Los sistemas anti spam, como los diferentes tipos de captcha, cada vez son más sofisticados. Pero los robots de spam aprenden rápido y son capaces de saltarse la técnicas para evitar el spam en formularios aproximadamente en un 23% de los casos.

Por otro lado, los usuarios cada día son mas "vagos" (dicho esto con cariño) y hasta señalar una casilla con el texto "No soy un robot" les causa desazón.

Lo que produce que un porcentaje significativo de ellos opten por evitar comentar o contactar contigo al ver que deben cumplimentar captchas que muchas veces no entienden o no funcionan correctamente.

Por cierto, a mí me ponen de los nervios los captcha de fotos. Siempre hay un escaparte de tienda o una señal de tráfico que no veo jeje.

Todo esto puede resultar en un quebradero de cabeza a la hora de  mantener un equilibrio aceptable entre la seguridad de tu sitio web y una buena experiencia de usuario, tan perseguida últimamente.

Por lo tanto, hemos de procurar que el control del spam en los formularios implementados en nuestro sitio web sea lo más transparente posible a nuestro usuario.

El "invisible reCAPTCHA" de Google

Google adquirió reCaptcha en 2009 y actualizó la versión en 2013 implementando la famosa casilla "no soy un robot".

Más tarde creó Invisible RECAPTCHA, una versión mejorada del sistema de verificación que monitorea los patrones de navegación para diferenciar a un humano de un bot de forma transparente al usuario.

Así, se eliminan los test con imágenes, frases ilegibles o palabras para demostrar que quien intenta cumplimentar un formulario no es un robot y evitar el spam.

Sin embargo, en ocasiones es complicado incluirlo en tus formularios. Así que vamos a darle miel a las moscas del spam hasta que de patas pegadas queden.

La técnica de honeypot como sistema para evitar el spam en formularios

El término honeypot fue acuñado durante la Guerra Fría para designar una técnica de espionaje y en la década de los 90 comienza a utilizarse para denominar a un sistema trampa​ o señuelo​ usado como herramienta de seguridad informática.

El honeypot ("tarro de miel" en inglés) se dispone en una red o sistema informático para ser el objetivo de un posible ataque informático, y así poder detectarlo y obtener información del mismo y del atacante.

En el campo de la lucha contra el spam en formularios web, la técnica honeyspot consiste en incluir un campo invisible al usuario humano pero irresistible para los spam bots.

Los robots spammers aman los campos input rellenándolos todos compulsivamentes. Así que es método consiste en incluir en el formulario un campo que se deja en blanco y se oculta mediante CSS. De esta forma el usuario no lo verá y no pondrá nada en él.

A la hora de guardar el comentario o enviar el formulario se verifica si hay algún valor para dicho campo y, en caso de que así sea, se bloquea el envío del mismo.

Paso 1: Agrega el campo honeypot a tu formulario

Puedes colocarlo en cualquier lugar del formulario, pero a mí me gusta ponerlo como el último campo.

Nota: Este campo NO DEBE EXISTIR en tu base de datos.

El campo y la etiqueta se envuelven en un DIV que está oculto usando CSS. El campo quedará oculto al usuario, pero no a los robots de spam.

En caso de que el usuario vea el campo, lo que es poco probable, se puede agregar una etiqueta para indicar al usuario que no complete el campo.

Paso 2: agrega alguna validación

Una vez agregado el campo honeypot al formulario, debe haber alguna validación para verificar si el mismo está vacío. Esto se puede hacer fácilmente en JavaScript.

Añade este fragmento de código al elemento FORM:

onsubmit="return evitarSpam();"

Incluye este script en tu página:

<script type="text/javascript"> function evitarSpam() { // Si el campo está vacío, envía el formulario. if(!document.getElementById("controlspam").value) { return true; } // Si el campo tiene algún valor, es un spam bot else { return false; } } </script>
Lenguaje del código: HTML, XML (xml)

Un ejemplo mínimo de formulario protegido de spam con la técnica honeypot:

<form action="enviar.php" onsubmit="return evitarSpam();" method="post"> <label>Tu correo electrónico</label> <input type="email" name="email"> <!-- Comienzo del campo honeypot --> <div style="display: none;"> <label for="nospam">Este es un campo de control. Si lo ves, pasa de él.</label> <input type="text" name="nospam" /> </div> <!-- Final del campo honeypot --> <input type="submit" value="Enviar"> </form>
Lenguaje del código: HTML, XML (xml)

Paso 3: Haz alguna prueba

Para probar el formulario, puedes mostrar el campo en la interfaz de usuario eliminando style = "display: none;" del DIV y realizar estas dos pruebas:

  1. Intenta dejar en blanco el campo honeypot
    Si el campo está en blanco, se debe enviar el formulario y dirigir al usuario a la página de agradecimiento, por ejemplo.
  2. Intenta completar el campo honeypot
    Rellena el campo honeypot con cualquier valor. El formulario no debe enviarse.

Si ambas pruebas funcionan, puedes agregar la propiedad CSS style = "display: none;" de nuevo al DIV.

Con este sencillo código puedes evitar el spam en tus formularios de forma fácil y con total transparencia para tus usuarios…. ¡Pruébalo!

linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram