Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Live sobre Rate Limits #501

Open
tiagojulianoferreira opened this issue Mar 13, 2024 · 2 comments
Open

Live sobre Rate Limits #501

tiagojulianoferreira opened this issue Mar 13, 2024 · 2 comments

Comments

@tiagojulianoferreira
Copy link

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
Copy link

guites commented Mar 16, 2024

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

@d3cryptofc
Copy link

É 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants