Tema 15

15. Rate limiting, cuotas, throttling y defensa frente a abuso y DoS

Una API segura no solo decide quién puede acceder, sino también cuánto puede consumir cada actor, con qué velocidad y bajo qué condiciones. Sin controles de volumen y ritmo, una API queda expuesta a scraping, fuerza bruta, automatización agresiva, degradación operativa y costos desproporcionados incluso cuando todas las solicitudes son técnicamente válidas.

Objetivo Controlar el consumo de la API frente a abuso y saturación
Enfoque Límites técnicos, contexto de negocio y resiliencia operativa
Resultado Reducir automatización agresiva y proteger disponibilidad

15.1 Introducción

Una API está diseñada para recibir tráfico. El problema no es el uso, sino el uso descontrolado. Si cualquier actor puede enviar un volumen alto de solicitudes, mantenerlas a gran velocidad o disparar operaciones costosas sin restricciones, la API queda vulnerable a abuso, degradación y denegación de servicio.

Este problema no siempre se manifiesta como un ataque ruidoso. A veces toma la forma de scraping constante, intentos de login distribuidos, consultas pesadas repetidas o consumo legítimo técnicamente válido pero desproporcionado respecto al objetivo del sistema.

Por eso, controlar el ritmo y la cantidad de consumo es una parte central de la seguridad en APIs REST.

15.2 Qué problema resuelven estos controles

Rate limiting, cuotas y throttling ayudan a responder preguntas como estas:

  • ¿Cuántas solicitudes puede hacer un actor por unidad de tiempo?
  • ¿Cuánto volumen total puede consumir en un período?
  • ¿Qué ocurre cuando supera el umbral?
  • ¿Qué operaciones son más caras o más sensibles y deben tratarse distinto?

Estas decisiones protegen no solo la infraestructura, sino también el negocio: evitan automatización abusiva, reducen impacto de errores de cliente y limitan oportunidades de fraude.

15.3 Rate limiting, cuota y throttling: diferencias

Aunque a menudo se usan como sinónimos, conviene diferenciarlos:

  • Rate limiting: limita la cantidad de solicitudes en una ventana de tiempo.
  • Cuota: limita el volumen total permitido en un período más amplio.
  • Throttling: desacelera o restringe progresivamente cuando se supera cierto umbral.
El rate limiting suele responder al ritmo instantáneo. La cuota responde al consumo acumulado. El throttling define cómo reacciona el sistema cuando ese consumo se vuelve excesivo.

15.4 Amenazas que se benefician de falta de límites

Una API sin controles de consumo adecuados facilita múltiples escenarios de abuso:

  • Credential stuffing y password spraying.
  • Enumeración de usuarios, recursos o tenants.
  • Scraping masivo de catálogos o datos estructurados.
  • Fuerza bruta sobre códigos, OTPs o identificadores.
  • Explotación reiterada de promociones o flujos sensibles.
  • Denegación de servicio por volumen o por costo computacional.

15.5 Qué debe limitarse exactamente

No toda API necesita un único límite global. En general conviene pensar varias dimensiones:

  • Solicitudes por IP.
  • Solicitudes por usuario autenticado.
  • Solicitudes por token o API Key.
  • Solicitudes por tenant u organización.
  • Solicitudes por endpoint o clase de operación.
  • Volumen de datos transferidos.
  • Cantidad de operaciones costosas o sensibles.

La elección depende del modelo de amenaza y del tipo de cliente. Limitar solo por IP puede ser insuficiente si el actor distribuye tráfico; limitar solo por usuario puede no alcanzar si hay muchas cuentas falsas.

15.6 Límites uniformes versus límites contextuales

Un error común es aplicar el mismo límite a toda la API. Algunas operaciones son baratas y frecuentes; otras son críticas o costosas. Tratar todo igual puede ser ineficiente o incluso contraproducente.

Conviene distinguir:

  • Lecturas livianas versus búsquedas complejas.
  • Login y recuperación de cuenta versus consultas normales.
  • Exportaciones o generación de reportes versus operaciones simples.
  • Flujos de negocio sensibles como compra, reserva o canje.

15.7 Límite técnico y límite de negocio

Algunos límites protegen infraestructura, mientras que otros protegen lógica de negocio. Ambos son necesarios, pero no persiguen exactamente lo mismo.

Tipo de límite Ejemplo Qué protege
Técnico 100 requests por minuto CPU, memoria, ancho de banda, base de datos
Funcional 5 intentos de login por hora Identidad y resistencia a fuerza bruta
De negocio 1 canje por promoción y por usuario Fraude y abuso de reglas comerciales
Operativo 1 exportación pesada cada 15 minutos Disponibilidad de procesos costosos

15.8 Algoritmos y ventanas de control

Existen distintas formas de implementar límites: ventanas fijas, ventanas deslizantes, token bucket, leaky bucket y variantes híbridas. No hace falta entrar en detalle matemático para entender la idea principal: cada enfoque define cómo se cuenta el consumo y cómo se suavizan o endurecen los picos.

Lo importante desde seguridad es que la estrategia elegida:

  • Sea consistente.
  • Resista ráfagas abusivas.
  • No premie comportamientos de borde por mala granularidad.
  • Sea operable en arquitectura distribuida.

15.9 Qué hacer cuando se supera el límite

Aplicar límites no es solo contar solicitudes. También hay que decidir cómo responde la API. Algunas opciones:

  • Bloquear temporalmente nuevas solicitudes.
  • Responder con un error específico de exceso de consumo.
  • Introducir backoff o demora controlada.
  • Degradar funcionalidades menos críticas.
  • Escalar a un mecanismo más fuerte de defensa o desafío.

La reacción debe ser proporcional al riesgo y al tipo de operación. No todo exceso merece el mismo tratamiento.

15.10 Rate limiting y autenticación

Los flujos de autenticación requieren límites especialmente estrictos. Login, recuperación de cuenta, envío de OTP, refresh de tokens o validaciones sensibles suelen ser objetivos primarios de automatización.

Conviene controlar:

  • Intentos por usuario.
  • Intentos por IP o rango.
  • Intentos por dispositivo o contexto, si existe esa noción.
  • Frecuencia de recuperación o generación de códigos.

15.11 Rate limiting y scraping

El scraping suele ser técnicamente legítimo en la forma, pero abusivo en volumen o propósito. Cuando una API expone datos estructurados, la extracción automatizada es mucho más sencilla que en una interfaz HTML tradicional.

Los controles útiles aquí incluyen:

  • Límites por consumidor y por endpoint.
  • Cuotas diarias o por período.
  • Restricciones sobre paginación y tamaño de respuesta.
  • Monitoreo de patrones secuenciales o exhaustivos.

15.12 Operaciones costosas y protección especial

No todas las solicitudes pesan igual. Algunas búsquedas, exportaciones, agregaciones o conversiones son mucho más costosas que una consulta simple. Si se las protege con el mismo límite genérico que al resto, el sistema puede seguir siendo vulnerable a abuso por costo computacional.

Una API madura identifica estas operaciones y les aplica políticas diferenciadas, incluso si el volumen total de requests parece bajo.

15.13 Identidad del actor para aplicar límites

Elegir la clave de identidad correcta para limitar es crucial. Según el caso, conviene contar por:

  • IP de origen.
  • Usuario autenticado.
  • API Key o client id.
  • Tenant u organización.
  • Combinación de varios factores.

Una sola dimensión rara vez alcanza. Un atacante puede distribuir tráfico entre IPs, crear múltiples cuentas o reutilizar varias credenciales. Por eso es habitual combinar señales.

15.14 Rate limiting distribuido y consistencia

En arquitecturas con múltiples nodos o regiones, aplicar límites de forma consistente se vuelve más complejo. Si cada instancia cuenta por separado sin coordinación, un atacante puede eludir parcialmente el control distribuyendo solicitudes entre nodos.

Esto obliga a pensar si los límites deben ser:

  • Locales por nodo.
  • Globales por servicio.
  • Híbridos con protección inicial local y coordinación central.

15.15 Señales complementarias al rate limiting

Los límites de volumen son útiles, pero no siempre bastan. También ayuda observar comportamiento:

  • Distribución de errores por actor.
  • Secuencia de IDs consultados.
  • Uso anómalo de endpoints raros o sensibles.
  • Horarios, geografía o patrones incompatibles con comportamiento humano.
  • Desbalance entre lectura, escritura y autenticación.

La mejor defensa suele combinar límites con detección contextual.

15.16 Comunicación del límite al cliente

En muchos casos conviene que el cliente legítimo entienda cuál es su margen de consumo. Esto puede ayudar a integraciones sanas, a backoff ordenado y a evitar reintentos ciegos.

Sin embargo, también hay que evitar exponer demasiado detalle que facilite ajuste fino por parte de atacantes. La información operativa compartida debe ser útil sin volverse una guía para el abuso.

15.17 Errores frecuentes

  • Aplicar un único límite genérico a toda la API.
  • Limitar solo por IP y asumir que eso alcanza.
  • No proteger especialmente login, recovery, exportaciones o búsquedas costosas.
  • Permitir paginaciones enormes o consultas de alto costo sin control.
  • No revisar qué pasa cuando el cliente excede el límite.
  • Implementar límites por nodo sin pensar en el comportamiento distribuido.
  • Confundir disponibilidad con seguridad y tratar el abuso solo como problema de performance.

15.18 Qué debes recordar de este tema

  • Rate limiting, cuotas y throttling protegen tanto infraestructura como lógica de negocio.
  • No basta con un límite global; hay que pensar por actor, endpoint y costo de operación.
  • Los flujos de autenticación y las operaciones costosas requieren controles reforzados.
  • Una API puede sufrir abuso grave aunque todas las solicitudes sean técnicamente válidas.
  • La defensa real combina límites cuantitativos con observación de comportamiento.

15.19 Conclusión

Controlar el consumo de una API es una parte esencial de su seguridad porque el abuso no siempre se manifiesta como exploit clásico, sino como volumen, persistencia o costo desproporcionado. Rate limiting, cuotas y throttling permiten transformar una API ingenuamente expuesta en un servicio más resiliente, más justo para consumidores legítimos y mucho menos rentable para actores maliciosos.

En el próximo tema estudiaremos la gestión segura de tokens, expiración, refresh tokens y revocación, para analizar cómo gobernar el ciclo de vida de las credenciales modernas en APIs REST.