Rate limit, colas y antispam para formularios y bots
Rate limit, colas y antispam son tres capas de protección - sin ellas, los formularios y los bots de Telegram/Discord se convierten rápido en canal de spam, flood y DoS. Un CAPTCHA no basta: hace falta limitar frecuencia, procesar en asíncrono y filtrar por contenido y reputación. Abajo - cómo montar un esquema práctico para sitios y bots sin complejidad de más.
- Rate limit - cuántas peticiones se permiten por ventana de tiempo desde una IP, cuenta o token
- Cola - búfer entre aceptar la solicitud y el trabajo pesado (email, CRM, LLM, webhook)
- Antispam - honeypot, CAPTCHA, heurísticas, blocklists y revisión de contenido
- Regla - primero cortes la frecuencia y proceses en asíncrono; luego endureces los filtros
- Objetivo - conservar leads reales y no tumbar el servicio bajo un botnet
Por qué atacan primero formularios y bots
Un endpoint público es una puerta sin llave. Los bots de spam buscan /contact, /api/lead y webhooks del bot, y envían miles de mensajes: phishing, spam SEO, credential stuffing, fuerza bruta de cupones. Sin límites suben las facturas de email/SMS/LLM, el CRM se llena de basura y los leads reales se ahogan en ruido.
Síntomas típicos:
- Pico de POST al formulario con cero conversiones de venta
- Textos idénticos desde IPs distintas - o basura única desde un mismo rango
- Colas de email o webhooks chocan con límites del proveedor
- El bot del mensajero responde más lento o cae por timeout
Rate limit: qué limitar y cómo
El rate limiting responde: «¿cuántas veces en N segundos se puede tocar este endpoint?». La clave del límite importa.
| Clave | Cuándo encaja | Riesgo |
|---|---|---|
| IP | Formularios anónimos, webhooks sin auth | NAT y redes corporativas cortan a usuarios buenos |
| User / chat_id | APIs autenticadas y bots | No protege antes del login |
| Token API / sesión | Integraciones de partners | Un token robado gasta todo el cupo |
| Fingerprint + IP | Antiabuso duro de formularios | Más difícil de implantar y explicar |
Ventanas prácticas:
- Formulario de leads: 3-5 envíos correctos por IP cada 10 minutos, más un tope duro a fallos (validación, CAPTCHA fallido)
- Login / OTP: aparte y más estricto - si no, fuerza bruta
- Comandos de bot: 1 respuesta pesada (generación, búsqueda) por usuario cada pocos segundos; comandos ligeros - más suave
- Techo global en proceso o worker - protege picos aunque las claves difieran
Al superar: HTTP 429 con Retry-After; en el bot - un «espere N segundos» corto, sin revelar umbrales internos. Registre los disparos: muestran si el límite es demasiado blando o demasiado duro.
Colas: por qué separar recepción y procesamiento
El formulario no debe escribir en el CRM, generar un PDF y llamar a una API externa de forma síncrona. Una cola (Redis, RabbitMQ, SQS, Celery, BullMQ) toma la tarea tras la validación y responde rápido: «solicitud aceptada».
Qué aporta la cola:
- Suavizado de picos - el spam o una campaña no tumba los procesos web
- Reintento ante fallos - retry con backoff en lugar de perder el lead
- Prioridades - pedidos pagados por encima de «descargar PDF»
- Aislamiento - workers de LLM/email escalan aparte del front
Flujo del formulario:
- CSRF / origin, honeypot, validación básica de campos
- Rate limit
- Guardar el lead en BD con estado
queued - Push a la cola
- HTTP 200/202 al usuario
- Worker: scoring antispam → CRM / email / notificación
Igual en bots: acepte rápido el update de Telegram; respuestas pesadas (RAG, imagen, parsing) van a la cola. Si no, long polling / webhook acumula latencia.
Antispam: capas, no una casilla
Un reCAPTCHA no cierra el tema. Construya defensa en profundidad.
1. Filtros baratos en la entrada
- Campo honeypot (oculto para personas, rellenado por bots)
- Tiempo mínimo de cumplimentación (demasiado rápido = bot)
- Comprobación de
Referer/Originy token CSRF - Límite de tamaño del body y del número de adjuntos
2. CAPTCHA y challenges
Muestre el challenge por señal, no siempre: tras N intentos, IP sospechosa o score alto. CAPTCHA permanente hiere la conversión; puntual casi no.
3. Contenido y reputación
- Blocklists de dominios/URL en el texto
- Detección de plantillas repetidas y spam agnóstico al idioma
- Comprobación de email (MX, dominios desechables)
- En bots: filtro de enlaces, stop words, límite de media
4. Señales de comportamiento
Historial: cuántos envíos de este dispositivo acabaron en compra o chat útil. Una IP nueva con docenas de «buy seo» por minuto - a cuarentena o revisión manual, no directo al CRM del comercial.
Cómo unir las tres capas
Orden recomendado en producción:
- Validación y antispam barato (honeypot, tamaño, CSRF)
- Rate limit por IP + id de usuario/chat
- Respuesta rápida al cliente / mensajero
- Cola con tope de jobs concurrentes por worker
- Antispam pesado e integraciones en el worker (scoring, CRM, email)
- Alertas ante picos de 429 y crecimiento de jobs rechazados
Así no gasta CPU ni dinero de proveedores en peticiones que el límite ya debía cortar.
Checklist de implantación
- [ ] Formulario y bot tienen límites distintos según el riesgo
- [ ] Hay circuit breaker global para email/SMS/LLM salientes
- [ ] 429 y mensajes del bot son claros, pero no enseñan a evadir
- [ ] La cola tiene DLQ (dead letter) y monitor de longitud
- [ ] Los leads sospechosos van a cuarentena, no a borrado silencioso
- [ ] Logs de rate limit y spam-score son útiles sin PII completa
- [ ] Prueba de carga: qué pasa a 100 RPS en
/contact
Conclusión
El rate limit corta la frecuencia, la cola protege el backend y los presupuestos de integración, el antispam separa basura de leads. Solo funcionan juntos: límite sin cola tumba handlers síncronos; cola sin filtros reparte spam por el CRM; filtros sin límite se encarecen bajo DDoS.
Si necesita diseñar la protección de formularios y bots para su stack (límites, cola, cuarentena, monitorización) - contacte conmigo. Orientaciones de soporte y mejoras - en la página de precios.
Si necesita ayuda con el desarrollo, la implementación de IA o el soporte del sitio para su proyecto - escríbame.
Preguntas frecuentes
¿En qué se diferencia el rate limit del antispam?
El rate limit cuenta intentos; el antispam valora contenido y comportamiento. El límite frena el flood aunque las peticiones sean «limpias»; el antispam atrapa spam raro pero tóxico que aún cabe en el cupo.
¿Hace falta una cola si hay pocos leads?
Sí, si hay APIs externas, email o LLM. Incluso con poco tráfico, un timeout síncrono del CRM rompe la UX del formulario. La cola es barata en reposo y salva en el pico.
¿CAPTCHA es obligatorio en cada formulario?
No. Mejor challenge por riesgo: tras rachas de error, mala reputación de IP o score anómalo. Molesta menos a las personas y sigue cortando bots.
En un bot, ¿limitar por chat_id o por IP?
Ambos. chat_id frena el flood de un usuario; IP/token del webhook protege de updates falsos y escaneo. En grupos los límites suelen ser más duros que en privado.
¿Qué hacer con leads que parecen spam?
A cuarentena con revisión manual o entrega diferida, no a la papelera sin rastro. Si no, pierde un lead legítimo raro y no ve cómo evolucionan los patrones de ataque.
Términos del artículo
webhooks — HTTP callbacks when events happen — llamadas HTTP cuando ocurren eventos
LLM — Large Language Model — modelo de lenguaje grande
CRM — Customer Relationship Management — gestión de relaciones con clientes
PII — Personally Identifiable Information — información personal identificable
DDoS — Distributed Denial of Service — denegación de servicio distribuida