Digamos que temos um balanceador de carga que também limita a taxa. A limitação de taxa parece bastante direta para usuários logados - basta olhar para o JWT e talvez usar um armazenamento de dados na memória para ver quantas solicitações nos últimos 10 segundos para esse usuário.
No entanto, e os usuários não conectados (não autenticados)? Não sabemos ao certo quem eles ou de onde a solicitação vem exatamente, portanto, não é possível limitar facilmente essas solicitações ou ..?
Existem soluções integradas para isso na AWS e em outras plataformas de hospedagem, é algo com que precisamos nos preocupar? Parece que precisamos lidar com a lógica de limitação de taxa de usuários logados manualmente, mas e quanto a usuários não logados?
Meu palpite / esperança é que possa haver algum mecanismo interno para solicitações não autenticadas de limitação de taxa em plataformas de hospedagem, informe-nos a todos.
Respostas:
Existem algumas abordagens que você pode adotar. Uma é que você precisa de um identificador de origem razoavelmente confiável, por exemplo, endereço IP. Você pode classificar o limite pelo endereço IP, para que os ataques a uma única máquina comprometida sejam limitados. Essa é uma abordagem bastante simples, mas há uma desvantagem de que grandes provedores de rede podem usar apenas endereços IP de saída únicos para ocultar um número muito grande de usuários atrás de um NAT.
Outra abordagem para limitar a taxa que você pode adotar é exigir uma prova de trabalho para quaisquer solicitações não autenticadas. Seu servidor emite um código de desafio que todos os clientes que fazem solicitações não autenticadas (por exemplo, solicitações de login) precisam calcular uma resposta intensiva em recursos antes que a solicitação seja processada. Uma implementação comum dessa idéia exige que os clientes calculem uma reversão parcial de hash.
fonte
Para saber se uma solicitação é de um usuário autenticado ou de um usuário anônimo, você precisa necessariamente processar a solicitação (embora rapidamente). Isso ainda significa que seu aplicativo está vulnerável a um ataque de negação de serviço.
Você deve verificar as solicitações gerais por segundo e, se um determinado número for excedido, você simplesmente ignora o restante. Esse número deve ser suficientemente alto para não causar problemas durante o funcionamento normal, mas deve proteger contra esses ataques.
Além disso, como regra geral, você provavelmente não deve assumir que um ataque não viria de um usuário autenticado, pelo menos no que diz respeito a ataques do DOS. Uma senha fraca permitiria facilmente a alguém presumir a identidade de um usuário antigo. Portanto, supondo que você possa fazer essa verificação, seus usuários (humanos) nunca devem precisar executar solicitações a essas taxas, não obstante, simplesmente porque você tem muitos usuários individuais.
fonte
Uma das principais ofertas da Cloudflare é a proteção contra ataques de negação de serviço, fornecendo um proxy inteligente para o seu API / servidor da web. O serviço básico é gratuito; eles ganham dinheiro com outros serviços relacionados, como serviços CDN e balanceamento de carga. Eles também fornecem serviços de Limitação de taxa mais sofisticados e controláveis , atualmente à taxa de US $ 0,05 por 10 mil solicitações boas (sem cobrança por solicitações rejeitadas), mas é necessário atualizar para planos pagos para obter mais de uma regra global.
Você pode usar o serviço Cloudflare com a AWS ou qualquer outra plataforma, desde que tenha controle sobre os servidores de nomes do domínio (como em, você pode alterar os servidores de nomes registrados para o seu domínio).
Você pode fornecer limites de taxa separados para usuários anônimos e conectados, direcionando os usuários conectados a URLs diferentes. Por exemplo, você pode simplesmente prefixar todos os seus caminhos de URL disponíveis anonimamente com '/ u' para criar um terminal que sempre exige autenticação e tem um limite de taxa diferente.
Observe que o limite de taxa do Cloudflare (como todos os limites comerciais para usuários anônimos que conheço) define um cliente por seu endereço IP. Isso pode causar problemas para as pessoas que usam VPNs comerciais ou Tor, uma vez que tendem a ocultar um grande número de clientes atrás de 1 endereço IP para aumentar a privacidade.
fonte
Na AWS, existem os serviços relacionados AWS Shield e AWS WAF . Eles são destinados principalmente à prevenção de ataques DDoS, mas também oferecem suporte à limitação de taxa com base em endereços IP.
No WAF, o conceito é chamado de Regras Baseadas em Taxa . A prevenção de tentativas de login baseadas em força bruta é mencionada como um caso de uso no anúncio original :
Outros provedores de nuvem devem ter ofertas semelhantes. Aqui está uma comparação tabular: Google Cloud Armour x AWS WAF x Cloudflare WAF .
Como você já está usando o Nginx, o uso da limitação de taxa interna baseada em IP também pode ser uma opção simples. O módulo é chamado ngx_http_limit_req_module . Esta postagem do blog descreve como pode ser usada.
Observe que a limitação de taxa baseada em IP é um conceito relativamente simples, mas não é perfeito:
Em geral, os endereços IP são um bom começo. Mas se você precisar de uma proteção mais forte, suas melhores opções dependerão do modelo do seu encadeamento (que tipo de ataques você deseja impedir).
fonte