Disponibilidade e abuso
Uma aplicação facilmente derrubada, ou que permite a um único chamador gerar um custo enorme, tem um problema de segurança mesmo sem vazamento de dados. Aqui o foco é limitar o que um único cliente pode consumir.
Checklist
- Aplique rate limiting em todos os endpoints, não só no login. Limite com que frequência e quantas chamadas cada cliente (por IP, por conta, por chave) pode fazer. Consumo ilimitado de recursos é um risco próprio da OWASP API. Retorne 429 quando o limite for excedido.
- Limite com mais rigor as operações caras. Tudo o que dispara uma chamada a modelo, um e-mail, uma conversão de arquivo, um relatório ou uma varredura de banco de dados merece um limite mais apertado, porque cada chamada custa dinheiro ou CPU de verdade.
- Limite a paginação. Um endpoint de listagem deve limitar quantos registros retorna por página.
?limit=1000000deve ser ajustado, não atendido. - Limite o tamanho de uploads e do corpo antes de fazer o parse, e limite o número de uploads ou jobs simultâneos que um usuário pode iniciar.
- Defina timeouts e limites de concorrência nas chamadas de saída e no tratamento de requisições, para que uma dependência lenta não esgote seus workers.
- Coloque um CDN ou WAF na frente para DDoS. Um serviço como o Cloudflare absorve enxurradas volumétricas e permite rate limiting e filtragem por geolocalização na borda, antes que o tráfego chegue à sua origem. Garanta que a origem não possa ser acessada diretamente, contornando a borda (veja infraestrutura).
- Falhe de forma fechada e barata. Quando um limite é atingido ou uma dependência está fora do ar, rejeite rapidamente com um status claro, em vez de enfileirar trabalho que se acumula.
- Acompanhe o custo do autoscaling. Ataques de esgotamento de recursos costumam aparecer primeiro na fatura da nuvem, não como uma indisponibilidade. Crie alertas para gastos e volume de requisições fora do normal.
Como testar
- Dispare uma rajada de requisições em cada endpoint e confirme que você recebe 429.
- Peça um tamanho de página enorme e um upload enorme e confirme que ambos são ajustados.
- Confirme que o IP da sua origem não responde ao tráfego da aplicação diretamente, apenas pela borda.