- Inicio
- Habilidades
- Seguridad
- Limitador de Tasa de API
Limitador de Tasa de API
Disena estrategias de rate limiting y proteccion DDoS — ventanas deslizantes, token buckets y throttling adaptativo para tus APIs.
El Problema
Sin rate limiting, tu API es un buffet abierto para atacantes. Intentos de login por fuerza bruta corren sin control a miles por segundo. Bots de scraping agotan tu base de datos e inflan costos de hosting. Un solo usuario con un loop puede disparar una denegacion de servicio para todos los demas. El rate limiting no es opcional — es un control de seguridad fundamental que protege la disponibilidad, previene el abuso y mantiene los costos predecibles.
El Prompt
Eres un arquitecto de seguridad de APIs. Disena una estrategia integral de rate limiting para mi aplicacion.
DETALLES DE LA API:
- Framework: [ej. Express, FastAPI, Spring Boot, Next.js API routes]
- Endpoints: [lista endpoints criticos — login, signup, busqueda, carga de archivos, pago]
- Patron de trafico: [ej. 1K RPM normal, 10K RPM pico]
- Infraestructura: [ej. servidor unico, balanceado, serverless, CDN]
- Proteccion actual: [ej. ninguna, nginx limit_req basico, Cloudflare]
Disenar rate limiting para cada categoria de endpoint:
1. **Endpoints de autenticacion** (login, registro, reset de contrasena):
- Requests por ventana, tamano de ventana y clave (IP, email o ambos)
2. **Endpoints de API publicos** (busqueda, listados, datos publicos):
- Limites por IP y por API key
3. **Endpoints de API autenticados** (CRUD, carga de archivos):
- Limites por usuario con tolerancia de burst
4. **Endpoints de webhook/callback**:
- Validacion por fuente y control de tasa
Para cada uno, especificar:
- **Algoritmo**: Ventana fija / Ventana deslizante / Token bucket / Leaky bucket
- **Estrategia de clave**: IP, user ID, API key o compuesta
- **Limites**: Requests por ventana con tolerancia de burst
- **Respuesta**: Codigo de estado, header Retry-After, cuerpo de error
- **Almacenamiento**: En memoria, Redis o contador distribuido
Incluir codigo de implementacion para mi framework especifico.
Ejemplo de Salida
## Estrategia de Rate Limiting
### Endpoints de Autenticacion
Algoritmo: Ventana deslizante
Clave: Compuesta IP + email
Limites: 5 intentos/minuto por IP, 20 intentos/hora por email
Respuesta: 429 con header Retry-After
### Implementacion (Express + rate-limit-redis):
const loginLimiter = rateLimit({
windowMs: 60 * 1000,
max: 5,
keyGenerator: (req) => `${req.ip}:${req.body.email}`,
handler: (req, res) => res.status(429).json({
error: 'Demasiados intentos', retryAfter: 60
})
});
Cuando Usar
Implementar rate limiting antes de cualquier lanzamiento de API publica, y revisar los limites cuando los patrones de trafico cambien significativamente. Esencial al agregar endpoints de autenticacion, procesamiento de pagos o funciones de carga de archivos. Usarlo despues de detectar picos de trafico inusuales o patrones de abuso en tus logs.
Tips Pro
- Capas de defensa — combina rate limiting a nivel de aplicacion con proteccion a nivel de infraestructura (Cloudflare, nginx, AWS WAF) para defensa en profundidad.
- Usa claves compuestas — rate limiting solo por IP se evita facilmente con proxies rotativos. Combina IP + user ID + API key para limitacion resistente.
- Retorna headers Retry-After — clientes legitimos pueden retroceder de forma elegante en lugar de martillar tu API. Incluye el header en cada respuesta 429.
- Monitorea antes de aplicar — despliega rate limiting en modo solo-logging primero para entender tus patrones de trafico y evitar bloquear usuarios legitimos.