Como implementar rate limiting em uma API Node.js?

Rate limiting no Express.js limita o número de requisições de um usuário em um determinado período, prevenindo ataques de sobrecarga.

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.

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

Compartilhe este tutorial: Como implementar rate limiting em uma API Node.js?

Compartilhe este tutorial

Continue aprendendo:

Como lidar com sessões e cookies no Express.js?

No Express.js, as sessões e cookies são utilizados para armazenar informações temporárias sobre os usuários, facilitando a autenticação e personalização.

Tutorial anterior

Como configurar variáveis de ambiente em uma API Node.js?

As variáveis de ambiente no Node.js permitem armazenar credenciais e configurações de forma segura e flexível.

Próximo tutorial