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

Rate limiting: identificar e deletar comportamentos abusivos #338

Closed
filipedeschamps opened this issue May 19, 2022 · 6 comments
Closed
Labels
back Envolve modificações no backend

Comments

@filipedeschamps
Copy link
Owner

Contexto

Hoje o TabNews não possui nenhuma proteção contra DoS ou DDoS, tanto em ataques contra a infraestrutura, quanto ataques de conteúdo. Eventualmente precisaremos colocar um Cloudflare na frente, mas eu não sei se ele vai identificar um ataque de conteúdo, por exemplo alguém fazer um script que crie 1 conteúdo a cada minuto, durante 60 minutos. Se ele identificar, alguém me avisa para eu configurar, se não, vamos executar no modo manual.

Execução

Acredito que nessa hora todo mundo irá recomendar usar alguma outra tecnologia de cache, como o Redis, mas vamos explorar qual o máximo que conseguimos da instância mínima de Postgres da AWS. Então a ideia é em cada Controller do site colocar um middleware (assim como fazemos para injetar o id da request) que terá a responsabilidade por tomar nota do evento (o ip que está fazendo a requisição, o id do usuário, qual tipo de requisição, ou outras informações que quisermos) e ele mesmo irá verificar os dados e decidir continuar com a request ou não.

Então com esses dados poderíamos criar regras como (só exemplo mesmo):

  1. Um ip não pode criar mais do que uma conta por dia.
  2. Um ip não pode criar mais do que 10 root contents por hora.
  3. Um ip não pode criar mais do que 30 child contents por hora.
  4. Um ip não pode fazer mais do que 500 requests por hora.

E com essas regras, poderíamos criar consequências e side-effects, por exemplo:

  1. Se o ip tentou criar mais do que 10 root contents dentro de uma hora, automaticamente o user relacionado tem suas features removidas, e todos esses conteúdos (ou todos os conteúdos da conta), são alterados para draft (ou se a gente tiver certeza que é um ataque, colocar tudo para deleted) e fazer a request retornar uma mensagem para entrar em contato com o suporte.
@filipedeschamps filipedeschamps added the back Envolve modificações no backend label May 19, 2022
@filipedeschamps filipedeschamps added this to the Milestone 4: TabCoins milestone May 19, 2022
@rodrigoKulb
Copy link
Contributor

Ótima ideia de criar regras por IP, só precisamos tomar cuidado que quando falando de IP estamos falando do IP de saída da internet.

Existem empresas por exemplo com vários funcionários utilizando o mesmo IP de saída, Mas acredito que seria só ajustar o item:
01 - Um ip não pode criar mais do que uma conta por dia.

Podemos criar uma tabela "castigo" assim que um IP quebrar as regras colocamos um castigo por um período.

@tembra
Copy link
Contributor

tembra commented May 19, 2022

Mas acredito que seria só ajustar o item:
01 - Um ip não pode criar mais do que uma conta por dia.

Pensei exatamente isso @rodrigoKulb !

Aqui em casa por exemplo somos dois que são cadastrados no TabNews. Nesse cenário só ia poder fazer um cadastro por dia hehe.

Acredito que a regra de 1 conta por IP por dia é algo muito rigoroso. Esse limite poderia até existir, mas deveria ser algo pra +10 por conta de empresas.

Podemos criar uma tabela "castigo" assim que um IP quebrar as regras colocamos um castigo por um período.

O ideal é realmente não termos um controle de criação de conta por IP e sim essa blacklist temporária (ou até permanente?) em caso do não cumprimento das demais regras. Assim um IP na blacklist não conseguiria criar contas.

@filipedeschamps
Copy link
Owner Author

Aqui em casa por exemplo somos dois que são cadastrados no TabNews.

Por algum motivo, isso me deu um calor no coração 😍

E total, as regras precisam atrapalhar o máximo que puder só quem estiver abusando.

Outra regra interessante a se criar é de tentativas de login. Nesse caso a gente deveria ser abusado e responder uma resposta que imite uma resposta real para o script do atacante não saber que caiu na regra.

@rodrigoKulb
Copy link
Contributor

rodrigoKulb commented May 19, 2022

Em outra Issue falei sobre o recaptcha, não considera uma opção? Exemplo errou o login já aparece na 2 tentativa.

O Google reCAPTCHA é um serviço gratuito para contas que realizam até 1 milhão de avaliações por mês em qualquer de suas versões. Entretanto, as contas que geram avaliações além de 1 milhão devem pagar taxas. Para até 10 milhões de avaliações por mês, o preço da taxa é de US$1 a cada mil avaliações.

@filipedeschamps
Copy link
Owner Author

Em outra Issue falei sobre o recaptcha, não considera uma opção? Exemplo errou o login já aparece na 2 tentativa.

Acho uma solução totalmente válida 🤝 talvez até já de largada no cadastro.

@filipedeschamps
Copy link
Owner Author

Implementado pelo PR #444 🤝

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
back Envolve modificações no backend
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants