Para frenar el spam en formularios necesitas combinar tres capas: un honeypot invisible, validación en servidor y un CAPTCHA moderno tipo reCAPTCHA o hCaptcha. Esa es la respuesta corta. La larga es lo que vienes a leer. Si gestionas una web con formulario de contacto, comentarios o registro, ya sabes lo que es abrir el buzón y encontrar veinte mensajes ofreciéndote relojes, criptomonedas y un amor verdadero residente en otro continente. El spam en formularios no es un problema de imagen: es ancho de banda desperdiciado, bases de datos contaminadas y, a veces, la puerta de entrada a algo peor. Los bots no descansan, no se cansan y no leen tu cartel de "por favor, no spam". Vamos a cerrarles la puerta con algo más contundente que la buena educación.
Por qué los bots adoran tus formularios
Un formulario web es, para un bot, un campo abierto. Rellena, envía, repite. No necesita entender qué vende tu empresa ni si tu producto le interesa. Solo busca un <form> con un action y dispara peticiones automatizadas a miles de sitios a la vez.
El objetivo varía. A veces es SEO spam: inyectar enlaces para posicionar webs basura. Otras veces buscan probar credenciales robadas, sembrar comentarios con malware o simplemente saturar tu base de datos. La OWASP lleva años clasificando los formularios sin protección como vector de abuso automatizado, y su listado de bots maliciosos (el proyecto OWASP Automated Threats) describe categorías como Spamming y Account Creation con nombre y apellidos.
Lo incómodo es que un formulario de contacto de tres campos puede recibir más tráfico automatizado que humano. Y tú, mientras tanto, filtrando a mano. Hay una vida mejor.
Honeypot: la trampa que los humanos no ven
El honeypot spam es la técnica más elegante y, sorprendentemente, una de las más eficaces. La idea: añades un campo extra al formulario, lo ocultas con CSS y rezas para que el bot lo rellene. Un humano nunca lo ve, así que lo deja vacío. Un bot, que rellena todo lo que encuentra, cae en la trampa. Si ese campo llega con contenido, descartas el envío sin contemplaciones.
Un ejemplo mínimo:
- Añades un campo tipo
<input type="text" name="website" tabindex="-1" autocomplete="off"> - Lo ocultas con CSS real (
position:absolute; left:-9999px), nunca contype="hidden", que los bots ya reconocen - En el servidor, si
websiteviene relleno, tiras el envío a la basura
Ventaja brutal: cero fricción para el usuario legítimo. No hay que descifrar letras torcidas ni señalar semáforos. La desventaja es que los bots más sofisticados ejecutan JavaScript y detectan campos ocultos, así que el honeypot no trabaja solo. Es la primera línea, no la única. Si quieres entender cómo los atacantes camuflan intenciones, el caso del dependency confusion en paquetes npm y PyPI es un buen recordatorio de hasta dónde llega la automatización maliciosa.
CAPTCHA y reCAPTCHA: el portero del local
Cuando el honeypot no basta, entra el CAPTCHA. El nombre es un acrónimo encantadoramente largo: Completely Automated Public Turing test to tell Computers and Humans Apart. Traducido: una prueba que un humano pasa medio dormido y un bot, en teoría, no.
La evolución ha sido notable. Las opciones reales hoy:
| Solución | Fricción usuario | Privacidad | Notas |
|---|---|---|---|
| reCAPTCHA v2 (Google) | Media (casilla / imágenes) | Baja | El clásico "No soy un robot" |
| reCAPTCHA v3 | Nula (puntuación invisible) | Baja | Devuelve score 0.0–1.0, tú decides el umbral |
| hCaptcha | Media | Mejor que Google | Alternativa con foco en privacidad |
| Cloudflare Turnstile | Baja / nula | Buena | Gratuito, sin puzzles, sin cookies de seguimiento |
El reCAPTCHA v3 no muestra nada al usuario: analiza el comportamiento y devuelve una puntuación. Tú decides qué hacer con un envío que puntúa 0.2. La pega es que envías datos de tus visitantes a Google, lo cual tiene implicaciones de RGPD que conviene tener en cuenta. Cloudflare Turnstile se ha convertido en el favorito de quien quiere proteger sin sacrificar privacidad ni meter puzzles de bicicletas. Antes de elegir, conviene saber dónde acaban los datos de tus usuarios; los metadatos ocultos en archivos son otro ejemplo de información que viaja sin que nadie la haya pedido.
Validación en servidor: nunca te fíes del navegador
Aquí va la regla de oro que demasiados desarrolladores olvidan: la validación del cliente es decorativa. Cualquiera puede saltarse tu JavaScript y enviar una petición directa a tu endpoint con curl. Toda comprobación seria ocurre en el servidor.
Capas que deberías apilar para proteger tu formulario web de verdad:
- Rate limiting: limita envíos por IP y por sesión. Tres mensajes en diez segundos desde la misma IP huelen a bot.
- Token CSRF: protege contra envíos forjados desde otros sitios.
- Time-trap: mide cuánto tarda en enviarse el formulario. Un humano necesita segundos; un bot lo completa en milisegundos.
- Validación de contenido: rechaza campos con más de N enlaces, con BBCode o con cirílico en un formulario destinado a clientes de Lleida.
- Listas de bloqueo: integra servicios como Project Honey Pot o StopForumSpam, que mantienen bases de IPs y emails reincidentes.
Si usas WordPress, buena parte de esto ya viene resuelto con plugins como Akismet, Antispam Bee o WPForms con honeypot integrado. Y si montas el sitio desde cero, conviene plantearse la seguridad desde el diseño en lugar de parchearla después. Para proyectos a medida, el equipo de desarrollo WordPress profesional suele integrar estas capas en el propio formulario en lugar de dejarlo a la suerte.
Qué hacer cuando el spam ya se ha colado
Ninguna defensa es perfecta. Algún mensaje pasará. Lo importante es no convertir ese spam en un problema mayor.
- No hagas clic en los enlaces que llegan por formulario. Pueden llevar a phishing o descargas maliciosas. Si dudas, conviene verificar si un enlace es seguro antes de clicar.
- No respondas confirmando que el buzón está activo: es justo lo que el spammer quiere saber.
- Comprueba tus credenciales en Have I Been Pwned si el spam coincide con intentos de registro o login sospechosos.
- Analiza adjuntos o URLs dudosas en VirusTotal antes de tocarlas.
- Denuncia los patrones reincidentes a StopForumSpam para alimentar las listas colaborativas.
El spam de formulario y el phishing comparten ADN. Muchos mensajes automatizados imitan a marcas conocidas, igual que ocurre con el phishing de Correos y paquetería. Reconocer el patrón te ahorra disgustos.
Preguntas frecuentes
¿El honeypot funciona sin CAPTCHA?
Funciona contra la mayoría de bots básicos y tiene la ventaja de cero fricción para el usuario. Pero los bots avanzados ejecutan JavaScript y detectan campos ocultos. Combínalo con validación en servidor y, si el sitio recibe ataques persistentes, añade un CAPTCHA.
¿reCAPTCHA cumple con el RGPD?
Es delicado. reCAPTCHA envía datos del visitante a Google, lo que requiere informar en tu política de privacidad y, según interpretaciones de varias autoridades europeas, base legal adecuada. Alternativas como Cloudflare Turnstile o hCaptcha reducen ese problema al procesar menos datos personales.
¿Qué es mejor, reCAPTCHA v2 o v3?
v2 muestra la casilla "No soy un robot" e interrumpe al usuario. v3 es invisible y devuelve una puntuación de riesgo que tú interpretas. v3 mejora la experiencia, pero exige que definas umbrales y gestiones falsos positivos. Para máxima privacidad, Turnstile suele ser preferible a ambos.
¿Cómo protejo un formulario sin molestar a los usuarios?
Empieza por las capas invisibles: honeypot, time-trap y rate limiting. Reservas el CAPTCHA visible solo para envíos sospechosos o cuando detectes un ataque activo. Así el 99% de los usuarios legítimos no nota nada.
¿Los formularios de WordPress están protegidos por defecto?
No del todo. WordPress trae poca protección nativa contra spam de formularios. Necesitas plugins como Akismet o Antispam Bee, o un constructor de formularios con honeypot y CAPTCHA integrados. El formulario de comentarios es especialmente goloso para los bots.
El siguiente paso
Abre el código de tu formulario de contacto ahora mismo y añade un campo honeypot oculto con CSS más una comprobación de tiempo de envío en el servidor. Son veinte minutos de trabajo y filtrarás la mayoría del ruido antes de plantearte siquiera un CAPTCHA. Si quieres seguir blindando tu correo y tus sistemas, pásate por el resto del blog de MataSpam: tenemos munición para rato.


