Técnica honeypot: protege tus formularios WordPress del spam

Cada formulario de contacto en WordPress es un objetivo potencial para los bots de spam. Mientras los CAPTCHA tradicionales resuelven el problema haciendo la vida difícil también al usuario, la técnica honeypot lo resuelve de forma invisible: el usuario no nota nada y el bot queda atrapado en su propia trampa.

Por qué los bots atacan tus formularios

Los bots que envían spam a formularios web siguen un patrón bastante predecible: escanean la página en busca de campos de formulario, los rellenan automáticamente y envían el resultado. Su objetivo varía desde insertar enlaces de spam hasta probar credenciales o generar ruido que sature la bandeja de entrada del propietario del sitio.

El problema con los CAPTCHA de texto o imagen es que añaden fricción al usuario legítimo, y reCAPTCHA v3 (el que funciona en segundo plano) tiene implicaciones de privacidad y rendimiento que no siempre son deseables. El honeypot no tiene ninguno de esos inconvenientes.

Cómo funciona el honeypot

La lógica es sencilla. Se añade al formulario un campo oculto mediante CSS (no mediante type="hidden", que los bots también detectan). Un usuario humano navega con el navegador mostrando el formulario renderizado, así que no ve ese campo ni lo puede rellenar. Un bot, en cambio, analiza el HTML directamente y rellena todos los campos que encuentra, incluido ese campo trampa.

En el servidor, la lógica de validación es: si el campo honeypot llega con algún valor, el envío se descarta. Si llega vacío, es un usuario real y se procesa normalmente.

Implementación manual en WordPress

Si controlas el código del formulario, añadir un honeypot es cuestión de dos pasos. Primero, el campo en el HTML:

<div class="form-field-wrapper" aria-hidden="true" style="position:absolute;left:-9999px;">
  <label for="hp-field">No rellenes este campo</label>
  <input type="text" name="hp-field" id="hp-field" tabindex="-1" autocomplete="off">
</div>

El tabindex="-1" impide que el foco del teclado llegue al campo, y el autocomplete="off" evita que los gestores de contraseñas lo rellenen por error. Usar position:absolute;left:-9999px en lugar de display:none es más robusto porque algunos bots avanzados comprueban si el campo está oculto con display:none.

Segundo, en el PHP que procesa el formulario:

if (!empty($_POST['hp-field'])) {
    // Bot detectado
    wp_die('Envío no válido.');
}
// Continuar con el procesamiento normal

Cómo activarlo con los plugins de formularios más usados

Si usas un plugin de formularios en lugar de código propio, la mayoría ya incluyen el honeypot como opción nativa:

  • Contact Form 7: no incluye honeypot por defecto, pero el plugin oficial Contact Form 7 Honeypot lo añade con una etiqueta de shortcode [honeypot] que insertas en el formulario.
  • Gravity Forms: incluye honeypot nativo que se activa desde la configuración del formulario. También tiene una capa adicional de detección por tiempo de relleno.
  • WPForms: activa el honeypot desde Configuración > General > Protección anti-spam. Es una casilla de un solo clic.
  • Fluent Forms: incluye protección honeypot en su plan gratuito, junto con la opción de activar reCAPTCHA si el honeypot por sí solo no es suficiente.

Honeypot vs CAPTCHA: cuándo usar cada uno

El honeypot es la mejor opción para la mayoría de formularios de contacto, suscripción o comentarios. No añade fricción al usuario y bloquea la mayoría de los bots simples que usan scrapers estándar.

El CAPTCHA tiene sentido cuando el formulario tiene alto valor objetivo (registro de usuario, paso de checkout, acceso a área privada) o cuando el spam sigue llegando a pesar del honeypot. En ese caso, los bots que atacan ese formulario son lo suficientemente sofisticados como para merecer una capa adicional.

Para la mayoría de los sitios WordPress, la combinación honepot + limitación de tasa de envío cubre el 95% de los casos. Si quieres ver cómo encaja esto con el resto de medidas de seguridad, el artículo sobre los mejores plugins de seguridad para WordPress cubre el cuadro completo. También hay que tener en cuenta la capa de acceso al propio panel: si aún no has puesto un segundo factor al wp-admin, el artículo sobre cómo asegurar el acceso al wp-admin lo explica paso a paso.

Preguntas frecuentes

¿El honeypot afecta la accesibilidad del formulario?

Si se implementa correctamente con aria-hidden="true" y tabindex="-1", no. Los lectores de pantalla y las herramientas de accesibilidad ignoran el campo, así que los usuarios con discapacidad visual no se verán afectados.

¿Puede fallar el honeypot con usuarios reales?

Es extremadamente raro, pero puede ocurrir si el usuario usa un gestor de contraseñas agresivo que rellena todos los campos del formulario. Por eso se añade autocomplete="off" al campo honeypot. Si aun así hay falsos positivos, se puede usar una capa de honeypot basada en tiempo (el formulario se considera bot si se envía en menos de 3 segundos desde la carga).

¿Los bots avanzados pueden evadir el honeypot?

Los bots que usan headless browsers (como Puppeteer o Playwright) renderrizan el CSS y pueden ver qué campos están ocultos, así que sí pueden evitarlo. Estos bots son mucho más caros de operar y no los usan para spam masivo de formularios normales. Si tu formulario es objetivo de ataques sofisticados, añade reCAPTCHA v3 o una capa de detección por comportamiento.

¿Sirve el honeypot para los comentarios de WordPress?

Sí. Plugins como Akismet combinan honeypot con análisis de contenido para filtrar el spam de comentarios. Si no quieres usar Akismet, hay plugins específicos como Antispam Bee que añaden honeypot al formulario de comentarios nativo de WordPress.

Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.