Closed JoseRenan closed 5 years ago
/cc @paulojbleitao @juliobguedes @thayannevls @JuanBarros2
Acho bom isso mas sei que existem ferramentas pra restringir isso sem precisar token. Acho que é o NGinx que faz isso se não me engano
A gente usa algumas no projeto do analytics, acho que posso perguntar mais detalhes para o pessoal que entende
Reforçando a sugestão do nginx: https://serverfault.com/questions/845554/handling-http-flood-via-webserver-configuration-django-app
O que eu não gosto sobre NGINX (dadas nossas condições de infraestrutura kkkk) é precisar ter uma VM rodando com ele na frente do app, e com um token a gente poderia simplesmente matar o token em caso de uso malicioso do laguinho apesar de só conseguir pensar em flood no momento 🤔
No caso do token, todo mundo que fosse fornecer um projeto que usasse algum dado via laguinho precisaria fazer um tratamento/cache server-side e fornecer ele mesmo a API usando o próprio token tendo cuidados para não floodar. Deve funcionar, mas também não parece muito amigável.
Uma opção é criar um pequeno hand-shake de autenticação que requer resolver um hash que gastará alguns segundos pra ser calculado. Nesse caso o flood mirando uma API seria tecnicamente inviável, mas ainda poderia haver um DoS criando conexões e não resolvendo os hashs.
Uma terceira opção que não deve afetar a infraestrutura do servidor é de fato fazer algum gerenciamento de IP e/ou controle de recursos no node, não deve ser difícil de implementar algo bom o bastante através de um middleware, mas já existem vários pacotes no node para isso.
Conversei com um colega de trabalho que tem experiencias em projetos open source e web e ele falou pra avaliar previamente se é mesmo necessário. Ele falou que foram poucas as vezes que isso realmente aconteceu nos sistemas que ele participou, mas recomendou o uso do NGinx.
Ele falou também que criar token pode ser uma barreira a mais pra quem quer utilizar a endpoint e que só usaria se achasse que era realmente necessário via demanda dos usuários.
Fico pensando se vale essa discussão tão cedo sem sabermos ainda do que realmente precisamos e tendo tão poucas endpoints e pessoas usando.
O ultimo ponto que ele falou foi sobre dar mais importância ao tempo de resposta via BD. Ele falou que isso costuma ser um gargalo mais recorrente e que deveríamos considerar antes de se preocupar com esses ataques em massa.
Concordo com @thayannevls. Acho que talvez no máximo caiba adicionar um NGinx, pois ele já trata de algumas questões triviais de segurança que a gente não teria tempo de implementar. Fora isso, acho que seria perder tempo em outras questões mais importantes mesmo.
Resolvido aqui #31
https://github.com/OpenDevUFCG/laguinho-api/issues/31#issuecomment-517514522
Pessoas, o laguinho já tá em pé e etc, mas a gente precisa restringir o acesso a ele, pra gente evitar flood malicioso e saber quem tá acessando, uma forma que pensei de fazer isso foi ter um sistema de dev account pra vc gerar seu token, mais ou menos como é feito nas APIs do github, spotify, twitter, facebook e etc, o que acham? e como vcs acham que a gente podia botar isso pra funcionar?