En la actualidad, donde la interacción en línea se ha vuelto omnipresente, los formularios web son una herramienta esencial para la recopilación de datos y la comunicación con los usuarios. Sin embargo, esto conlleva casi con total seguridad una plaga persistente: el spam. Los bots automatizados acechan en la web, rellenando formularios con contenido no deseado.
En mi caso particular, últimamente había notado un crecimiento exponencial de comentarios spam, a pesar de tener un sistema antibots como Google Recaptcha. Aquí es donde entra en juego una técnica ingeniosa que no ha logrado eliminar el problema del todo, pero lo ha reducido considerablemente: el honeypot.
¿Qué es un Honeypot y cómo funciona?
En esencia, es una técnica diseñada para atrapar a bots y scripts automatizados que inundan formularios web con contenido no solicitado. El honeypot actúa como una trampa astuta para detectar y frustrar los intentos de los bots de infiltrarse en formularios web.
La táctica se basa en la introducción sutil de un campo adicional, aparentemente invisible para los usuarios humanos, pero detectable por los agentes automatizados. La implementación típica implica la creación de un campo, comúnmente denominado honeypot, que se oculta visualmente mediante CSS, permaneciendo presente en el código fuente HTML pero fuera de la vista del usuario.
La sutileza radica en la incapacidad de los usuarios humanos para percibir o interactuar con este campo, mientras que los bots, al completar indiscriminadamente todos los campos disponibles, caen inadvertidamente en la trampa, por lo que podremos detectar al procesar el formulario si ese campo tiene un valor, es decir, ha sido completado por un bot.
Ejemplo práctico en PHP
La primero de todo, añade el campo a tu formulario y ocúltalo con estilos en línea o añádele una clase para ocultarlo por CSS:
<div class="form-group" style="display: none !important">
<label for="hp_field">No completar</label>
<input type="text" id="hp_field" name="hp_field" class="form-control">
</div>
Ahora, en tu código PHP, al procesar el formulario simplemente comprueba si ese campo está vacío o no. Se espera que esté vacío, ya que no está a la vista de un usuario que completa el formulario legítimamente. Un bot lo completará con algún valor y es cuando podremos descartar y cortar el proceso:
$hp_field = esc_attr($_POST['hp_field']);
if (!empty($hp_field)) {
wp_die();
}
En este escenario, si el campo honeypot está lleno, identificamos la actividad no deseada y rechazamos continuar con el procesamiento del formulario. La ausencia de contenido en el campo indica la autenticidad de la interacción y permite el procesamiento del formulario.
En el caso del formulario de comentarios de WordPress, podemos engancharnos al hook pre_comment_on_post para hacer estas comprobaciones.
Ventajas y consideraciones
- No afecta a los usuarios legítimos: Los honeypots no interfieren con la experiencia de los usuarios humanos, ya que estos no ven ni interactúan con el campo oculto.
- Fácil implementación: La adición de un honeypot a un formulario web es relativamente simple, y muchos marcos y bibliotecas web ofrecen funcionalidades incorporadas para su implementación.
- Detección temprana: Los honeypots permiten detectar y bloquear el spam antes de que llegue a la base de datos o interfiera con otros procesos.
- No es infalible: Aunque efectivo, el honeypot no es una solución infalible. Los spammers pueden evolucionar y adaptarse, y algunos bots pueden estar diseñados para detectar y evitar honeypots.
Conclusiones
En la lucha constante contra el spam en formularios web, el honeypot es una herramienta ingeniosa y efectiva. Al implementar estrategias como esta, los desarrolladores web pueden proteger sus aplicaciones contra la invasión automatizada de bots, garantizando en gran medida que los datos recopilados a través de formularios sean genuinos y valiosos.
En mi experiencia personal, he pasado de recibir unos 50 comentarios de spam a la semana a únicamente un par de ellos. No es infalible, pero es un gran avance.