Disponibilidad y abuso
Una aplicación que se tumba con facilidad, o que permite que un solo cliente dispare tu factura, tiene un problema de seguridad aunque no se filtre ningún dato. Esto trata de limitar lo que puede consumir un solo cliente.
Lista de verificación
- Aplica limitación de tasa a cada endpoint, no solo al inicio de sesión. Limita cuántas veces y cuántas llamadas puede hacer cada cliente (por IP, por cuenta o por clave). El consumo de recursos sin restricciones es su propio riesgo de OWASP API. Devuelve 429 cuando se supere el límite.
- Limita con más fuerza las operaciones costosas. Cualquier cosa que dispare una llamada a un modelo, un correo, una conversión de archivos, un informe o un escaneo de base de datos merece un límite más estricto, porque cada llamada cuesta dinero o CPU reales.
- Limita la paginación. Un endpoint de listado debe limitar cuántos registros devuelve por página.
?limit=1000000debe acotarse, no atenderse. - Limita el tamaño de las subidas y del cuerpo antes de analizarlos, y limita el número de subidas o trabajos simultáneos que un usuario puede iniciar.
- Establece tiempos de espera y límites de concurrencia en las llamadas salientes y en el manejo de solicitudes, para que una dependencia lenta no agote tus workers.
- Pon una CDN o un WAF delante para DDoS. Un servicio como Cloudflare absorbe inundaciones volumétricas y te permite aplicar limitación de tasa y filtrado geográfico en el borde, antes de que el tráfico llegue a tu origen. Asegúrate de que no se pueda acceder al origen directamente, eludiendo el borde (consulta infraestructura).
- Falla de forma cerrada y barata. Cuando se alcance un límite o una dependencia esté caída, rechaza rápido con un estado claro, en lugar de encolar trabajo que se acumula.
- Vigila el coste del autoescalado. Los ataques de agotamiento de recursos suelen aparecer primero como una factura de la nube, no como una caída. Configura alertas por gasto inusual y por volumen de solicitudes.
Cómo probar
- Lanza una ráfaga de solicitudes a cada endpoint y confirma que obtienes 429.
- Solicita un tamaño de página enorme y una subida enorme, y confirma que ambos se acotan.
- Confirma que tu IP de origen no responde al tráfico de la aplicación directamente, solo a través del borde.