dunossauro / live-de-python

Repositório das lives de python semanais
https://youtube.com/@dunossauro
MIT License
1.16k stars 209 forks source link

Live sobre Rate Limits #501

Open tiagojulianoferreira opened 5 months ago

tiagojulianoferreira commented 5 months ago

Olá!

Outro dia desenvolvi um app simples com Python e FastAPI, para verificação de cadastro numa base LDAP em que um requisito era ser o mais fácil possível, pensando em usuários com baixíssimo letramento digital.

Minha preocupação foi com algum tipo de ataque de negação de serviço (DDoS) , usar um captcha dificultaria para o usuário.

Numa pesquisa rápida vi que existem bibliotecas como RateLimiter que implementam limites de requisições numa faixa de tempo, pelo mesmo host, bloqueando tentativas muito recorrentes.

Como sou SysAdmin, me questiono se seria a melhor abordagem? De qualquer modo, para implementações simples parece fazer sentido né? Ou mesmo como uma feature do sistema para o usuário poder definir suas políticas de requisição nos endpoints?

No fim, acabei optando em usar o fail2ban, ao qual eu estava mais habituado, mas fica como sugestão para uma live futura, caso não tenha sido apresentado ainda.

Abraço!

guites commented 5 months ago

+1 nesse! Acho que todo mundo que sobe app em produção sofre com isso

d3cryptofc commented 5 months ago

É uma excelente sugestão de live, mas me preocupo que a configuração para mitigação de DDoS pode variar dependendo de como você vai subir sua aplicação para produção, então acredito que isso pode complicar um pouco pra escolher um caminho pro roteiro da live..

Se está em produção, então imagino que esteja usando um servidor web / proxy reverso como nginx, traefik ou qualquer outro, então alguns caminhos seriam esses:

  1. Somente uma instância da sua aplicação web Usar uma biblioteca pra adicionar um Rate Limiter parece aceitável, mas não dispensa o uso de um servidor web.

  2. Múltiplas instâncias e somente um balanceador de carga Geralmente o próprio servidor web já permite configurar Rate Limiting, veja:

  3. Múltiplos balanceadores de carga Aqui já começa a complicar ainda mais, pois para o rate limiting funcionar bem é necessário que todos os servidores web compartilhem as informações de Rate Limiting, mas dependendo do servidor web escolhido talvez ele permita usar um banco de dados como o redis para armazenar estes dados, ou você pode usar algum serviço de WAF pra ficar na frente dos balanceadores de carga.

Mas independente de que haja um Rate Limiter configurado, na grande maioria das vezes é indispensável usar Cloudflare para servir como escudo para sua aplicação.