Como implementar rate limiting em uma API Node.js?
O rate limiting é uma técnica para limitar o número de requisições que um usuário pode fazer em um determinado período de tempo. Isso evita abusos, como ataques DDoS e consumo excessivo de recursos.
1. Instalando a biblioteca express-rate-limit
A biblioteca express-rate-limit
facilita a implementação de rate limiting no Express.js:
npm install express-rate-limit
2. Configurando o rate limiting
Crie um middleware para limitar requisições:
const express = require('express');
const rateLimit = require('express-rate-limit');
const app = express();
app.use(express.json());
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutos
max: 100, // Limite de 100 requisições por IP
message: 'Muitas requisições deste IP, tente novamente mais tarde.',
});
app.use(limiter);
app.get('/', (req, res) => {
res.send('API protegida com rate limiting!');
});
app.listen(3000, () => console.log('Servidor rodando na porta 3000'));
Agora, cada IP pode fazer no máximo 100 requisições a cada 15 minutos.
3. Aplicando rate limiting apenas em rotas específicas
Se quiser aplicar rate limiting apenas em endpoints específicos:
const loginLimiter = rateLimit({
windowMs: 5 * 60 * 1000, // 5 minutos
max: 5, // Apenas 5 tentativas de login
message: 'Muitas tentativas de login, tente novamente mais tarde.',
});
app.post('/login', loginLimiter, (req, res) => {
res.send('Tentativa de login');
});
Isso evita ataques de força bruta no login.
Conclusão
A implementação de rate limiting no Express.js protege APIs contra abusos, melhorando a segurança e estabilidade do servidor.
Por que rate limiting é essencial para proteger APIs?
Rate limiting é uma das técnicas mais eficazes para evitar abusos em APIs. Grandes plataformas, como Twitter e GitHub, utilizam essa abordagem para limitar chamadas de API por usuários não autenticados.
Além do express-rate-limit
, outras soluções incluem caches distribuídos, como Redis, para armazenar contadores de requisições e aplicar regras mais avançadas de limitação.
Algumas aplicações:
- Prevenção de ataques DDoS
- Limitação de tentativas de login
- Proteção contra uso abusivo de recursos
- Garantia de equidade no uso da API
- Melhoria na estabilidade do servidor
Dicas para quem está começando
- Use
express-rate-limit
para um rate limiting básico. - Implemente limites diferentes para rotas críticas, como login.
- Considere armazenar contadores de requisições em Redis para melhor desempenho.
- Reduza a janela de tempo para evitar abusos frequentes.
- Combine rate limiting com autenticação JWT para maior segurança.
Contribuições de Lucas Fernandes