Cómo proteger un formulario del spam

Por qué los formularios son un objetivo del spam
Todos los formularios de tu web son un objetivo potencial para los bots de spam. Los formularios de contacto, de comentarios, de registro y de suscripción a la newsletter reciben constantemente ataques de scripts automatizados que envían mensajes no deseados. Los mensajes de spam no solo saturan tu bandeja de entrada: también pueden contener enlaces maliciosos, intentos de phishing o incluso intentos de inyección SQL.
Se estima que más del 40 % del tráfico total de internet lo generan bots, y una parte importante de esos bots está diseñada para enviar spam a través de formularios web. Sin ninguna protección, puedes esperar de decenas a cientos de mensajes de spam al día, según la popularidad de tu web. Más allá de la molestia, el spam puede tener consecuencias graves: si los spammers usan tu formulario para enviar correos, tu dominio puede acabar en una lista negra.
reCAPTCHA: la protección de Google
Google reCAPTCHA es el método de protección contra el spam más popular. Existe en tres versiones, cada una con sus ventajas e inconvenientes.
reCAPTCHA v2 (casilla de verificación)
La clásica casilla «No soy un robot». El usuario marca la casilla y el algoritmo de Google analiza los movimientos del ratón, la velocidad de interacción y otras señales para determinar si el usuario es humano. A veces requiere un reto adicional, como reconocer imágenes. Ventajas: sencillo de implementar, fiable. Inconvenientes: añade fricción a la experiencia de usuario, puede frustrar a los usuarios con conexiones deficientes.
reCAPTCHA v3 (invisible)
Funciona en segundo plano sin interacción del usuario. Asigna una puntuación de 0,0 (probablemente un bot) a 1,0 (probablemente un humano) según el comportamiento del usuario en la web. Tú decides qué puntuación es aceptable (normalmente 0,5 o superior). Ventajas: cero fricción para el usuario, monitorización continua. Inconvenientes: puede producir falsos positivos, requiere verificar la puntuación en el servidor, suscita dudas de privacidad porque rastrea el comportamiento del usuario.
Turnstile (alternativa de Cloudflare)
Cloudflare Turnstile es una alternativa a Google reCAPTCHA centrada en la privacidad. No usa retos visuales y no rastrea a los usuarios más allá de tu web. La implementación es similar a la de reCAPTCHA, pero sin el rastreo de Google. Es gratuito para todas las webs y sencillo de integrar.
La técnica del honeypot
El honeypot es un método de protección contra bots de spam elegante y totalmente invisible. El principio es sencillo: añade un campo oculto al formulario que sea invisible para los usuarios humanos, pero visible para los bots.
Cómo funciona
Añade un campo de entrada al formulario y ocúltalo con CSS (display: none o position: absolute con un desplazamiento negativo). Ponle un nombre que suene legítimo, como «email2» o «website». Los usuarios humanos no verán este campo y no lo rellenarán. Los bots, en cambio, rellenan automáticamente todos los campos de un formulario. Cuando tu servidor recibe un formulario con el campo honeypot relleno, sabes que lo ha enviado un bot y puedes ignorarlo.
Implementación
En el lado del HTML, añade un campo con una clase CSS que lo oculte. En el servidor, comprueba si el campo honeypot está vacío. Si no lo está, rechaza el mensaje sin error (devuelve la misma respuesta de «gracias» para que el bot no sepa que lo han pillado). Importante: no uses display:none en el propio elemento, porque los bots más listos pueden detectarlo. En su lugar, usa una clase CSS o un div contenedor que desplace el campo fuera del área visible.
Ventajas e inconvenientes
Ventajas: cero fricción para los usuarios, no requiere JavaScript, sin dependencias de terceros, fácil de implementar. Inconvenientes: no protege contra bots sofisticados que analizan el CSS, no protege contra el spam manual (personas que envían spam a mano).
Rate limiting
El rate limiting restringe el número de peticiones que un usuario puede enviar dentro de un periodo de tiempo determinado. Es una protección eficaz tanto contra bots como contra usuarios abusivos.
A nivel del servidor
Nginx tiene un módulo de rate limiting integrado. Puedes limitar el número de peticiones POST a tu formulario a, por ejemplo, 5 por minuto y por dirección IP. Cada petición por encima del límite recibe una respuesta HTTP 429 (Too Many Requests). Esto previene de forma eficaz a los bots que envían cientos de peticiones por segundo.
A nivel de la aplicación
La mayoría de los frameworks web tienen un middleware de rate limiting. Laravel tiene el middleware ThrottleRequests, Express.js tiene el paquete express-rate-limit, Django tiene django-ratelimit. A nivel de la aplicación puedes ser más preciso: por ejemplo, limitar el número de mensajes a 3 por sesión, no solo por dirección IP.
A nivel del CDN
Cloudflare, AWS WAF y servicios similares pueden aplicar rate limiting antes de que la petición llegue siquiera a tu servidor. Es lo más eficaz, porque protege tanto contra los ataques DDoS como contra los bots de spam a nivel de red.
Validación en el servidor
Nunca te bases únicamente en la validación del frontend. Todo bot de spam serio salta el JavaScript y envía las peticiones directamente al endpoint de tu servidor.
Validación del correo electrónico
Comprueba el formato de la dirección de correo, pero también si el dominio existe realmente (comprobación del registro DNS MX). Rechaza los dominios de correo desechable conocidos (mailinator.com, tempmail.com, etc.), porque suelen usarse para el spam.
Contenido del mensaje
Comprueba si el mensaje presenta señales habituales de spam: demasiados enlaces (más de 2-3 en un mensaje de contacto es sospechoso), palabras de spam conocidas (casino, farmacia, barato, compra ya), el mismo texto enviado varias veces, mensajes en un idioma que no esperas en tu web.
Umbral de tiempo
Mide cuánto tiempo pasó un usuario en la página antes de enviar el formulario. Si el formulario se rellenó en menos de 3 segundos, lo más probable es que sea un bot. Añade una marca de tiempo oculta al formulario y compruébala en el servidor. Es una técnica sencilla pero eficaz.
Akismet y servicios similares
Akismet es un servicio antispam desarrollado por Automattic (la empresa detrás de WordPress). Analiza el contenido del mensaje, la dirección IP, el user agent y otras señales para determinar si un mensaje es spam. Es gratuito para uso personal y ofrece planes asequibles para webs comerciales.
La integración es sencilla: envía el contenido del formulario a la API de Akismet y obtén una respuesta que indica si el mensaje es spam o no. Akismet procesa más de 500 millones de comentarios al mes y tiene una precisión extremadamente alta (99,9 %).
Entre las opciones alternativas están CleanTalk (de pago, sin CAPTCHA), OOPSpam (basado en API, centrado en la privacidad) y hCaptcha (similar a reCAPTCHA, pero con mejor privacidad).
Un enfoque combinado: la mejor protección
Ninguna técnica por sí sola es perfecta. La mejor protección combina varios métodos en una defensa por capas.
- Capa uno - Honeypot: Atrapa a la mayoría de los bots sencillos sin fricción para los usuarios.
- Capa dos - Rate limiting: Previene el envío masivo y los ataques DDoS contra el formulario.
- Capa tres - reCAPTCHA v3 o Turnstile: Para los bots más sofisticados, una comprobación invisible en segundo plano.
- Capa cuatro - Validación en el servidor: Comprueba el contenido, el formato y el umbral de tiempo.
- Capa cinco - Akismet: La última línea de defensa para los mensajes que superan todas las capas anteriores.
Conclusión
Proteger los formularios del spam es un proceso que requiere varias capas de defensa. Empieza con un campo honeypot y la validación en el servidor como base, añade rate limiting a nivel del servidor e implementa reCAPTCHA v3 o Cloudflare Turnstile para una protección avanzada. Para las webs con grandes volúmenes de spam, Akismet o un servicio similar aporta una capa de seguridad adicional. En BeoHosting, nuestros planes de hosting son compatibles con todos estos métodos de protección, y nuestro equipo de soporte puede ayudarte con la configuración del rate limiting en el servidor y otras medidas de seguridad.
BeoHosting Team
10+ años de experiencia — Especialistas en alojamiento web e infraestructura
- Web Hosting
- WordPress Hosting
- VPS
- Dedicated Serveri
- Domeni
- SSL
- cPanel
- LiteSpeed
- Linux administracija
- DNS
Última actualización: