Contáctanos
Webflow Premium Partner Ehab Fayez
Volver a Agent Skills
Seguridad y Calidad

API Rate Limiting

Protege APIs del abuso con limitación de tasa configurable usando ventanas deslizantes, cubos de tokens o ventanas fijas.

Claude Code Cursor Copilot Windsurf Gemini CLI

Descripción General

express-rate-limit es un middleware básico de limitación de tasa para Express.js que limita solicitudes repetidas a APIs y endpoints públicos. Usa un almacén en memoria por defecto pero soporta almacenes externos como Redis para despliegues distribuidos. El middleware rastrea conteos de solicitudes por cliente (identificado por dirección IP o clave personalizada) dentro de una ventana de tiempo configurable.

La biblioteca soporta limitación de tasa de ventana fija por defecto, donde cada cliente obtiene un número establecido de solicitudes por ventana de tiempo. Para algoritmos más sofisticados como ventanas deslizantes o cubos de tokens, paquetes complementarios como rate-limit-redis y rate-limit-flexible proporcionan implementaciones avanzadas de almacén. Puedes configurar diferentes límites para diferentes rutas, omitir ciertas solicitudes y personalizar la respuesta cuando se exceden los límites.

La limitación de tasa es esencial para la seguridad API, previniendo ataques de fuerza bruta en endpoints de autenticación, mitigación DDoS y protección contra scraping. Las mejores prácticas incluyen establecer límites más estrictos en endpoints sensibles (login, reset de contraseña), usar retrasos progresivos y proporcionar headers de rate limit para que los clientes puedan autorregularse.

¿Para Quién Es?

  • Limitar intentos de login para prevenir ataques de fuerza bruta
  • Throttle endpoints API públicos por API key
  • Establecer diferentes límites de tasa para niveles API gratuitos vs pagos
  • Agregar limitación de tasa con almacén Redis para servidores distribuidos

Instalación

Configurar Claude Code
npm install express-rate-limit

Configuración

import rateLimit from "express-rate-limit"

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  limit: 100, // max 100 requests per window
  standardHeaders: "draft-7",
  legacyHeaders: false,
  message: { error: "Too many requests, please try again later." },
})

app.use("/api/", limiter)