Pesquisa de site

O que é limitação de taxa?


A limitação de taxa é uma técnica simples, mas altamente eficaz, para proteger APIs contra uso excessivo não intencional e malicioso. Sem um limite de taxa, qualquer um pode bombardear um servidor com solicitações e causar picos de tráfego que consomem recursos, “morrem de fome” outros usuários e fazem com que o serviço pare de responder.

Este artigo é uma introdução à limitação de taxa e à importância de restringir o número de solicitações que chegam a APIs e serviços. Explicamos o que são limites de taxa e como funcionam, além de abordar os diferentes tipos de algoritmos que você pode usar para adotar a limitação de taxa para seu caso de uso.

Quase 95% das empresas tiveram um incidente de segurança relacionado a APIs em 2022. Além disso, aproximadamente 31% (cerca de 5 bilhões) de todas as transações maliciosas tiveram como alvo APIs, o que deveria colocar a proteção desse vetor de ataque no topo da lista de tarefas de uma organização. .

O que é limitação de taxa?

A limitação de taxa é a prática de restringir o número de solicitações que os usuários podem fazer a uma API ou serviço específico. Você limita a frequência com que os usuários podem repetir uma ação (ou seja, tentar fazer login em uma conta ou enviar uma mensagem) dentro de um determinado período de tempo. Se alguém atingir o limite, o servidor começará a rejeitar solicitações adicionais.

A limitação de taxa é uma precaução de segurança cibernética e uma parte fundamental da garantia de qualidade de software (QA). As empresas usam limites de taxa para:

  • Evite que um grande número de solicitações sobrecarregue um servidor web ou de aplicativos.
  • Garanta que todos os usuários tenham acesso igual à API e que ninguém consuma muita largura de banda, armazenamento de dados ou memória.
  • Impedir que usuários humanos, bots e aplicativos (qualquer pessoa ou qualquer coisa com capacidade de emitir chamadas para uma API) abusem de uma propriedade da web.
  • Evite diferentes tipos de atividades maliciosas de bots (nomeadamente DoS/DDoS e ataques de força bruta).

Tecnicamente, a limitação de taxa é uma forma de modelagem de tráfego. A prática permite controlar o fluxo e a distribuição do tráfego para evitar sobrecarga ou falha na infraestrutura.

A maioria dos sistemas com limite de taxa tem limites bem acima do que até mesmo um usuário de alto volume poderia solicitar de forma realista. O exemplo mais comum são as mensagens nas redes sociais. Todos os sites de mídia social têm um limite para o número de mensagens diretas que você pode enviar a outros usuários. Se alguém decidir enviar mil mensagens para outros perfis, a limitação de taxa entra em ação e impede o usuário de enviar mensagens por um determinado período.

Aprenda as maneiras mais eficazes de prevenir ataques DDoS e fique um passo à frente dos possíveis hackers que tentam sobrecarregar seu servidor com tráfego falso.

Por que a limitação de taxa é importante?

Aqui está uma lista dos principais motivos pelos quais a limitação de taxas é um aspecto essencial de qualquer serviço saudável:

  • Evitando sobrecargas: muitas solicitações podem sobrecarregar um servidor, fazendo com que ele fique lento ou até pare de responder. Limitar o número de solicitações que um servidor ou API processa ajuda a manter o desempenho e a disponibilidade do seu serviço.
  • Garantir justiça: A limitação de taxa evita que qualquer usuário monopolize recursos às custas de outros. Colocar um limite nas solicitações permitidas dá a todos uma oportunidade justa de usar o serviço.
  • Gerenciamento de custos: Se houver um custo associado a cada solicitação feita ao serviço, a limitação de tarifas é essencial para controlar despesas e garantir o uso eficiente dos recursos.
  • Medição de uso: se um usuário se inscrever em um plano que permite, por exemplo, 1.000 solicitações de API por hora, a limitação de taxa garante que o cliente permaneça dentro do limite definido.
  • Controle do fluxo de dados: a limitação de taxa permite que um administrador controle os fluxos de dados, o que é fundamental para APIs que processam grandes volumes de dados. Por exemplo, você poderia distribuir dados uniformemente entre duas APIs limitando o fluxo em cada elemento.
  • Proteção contra atividades maliciosas: a limitação de taxas é vital para prevenir vários tipos de ataques cibernéticos. A prática é combater ataques de negação de serviço (inundar o servidor com solicitações na tentativa de fazê-lo parar de responder), ataques de força bruta (bots que tentam adivinhar senhas de login digitando caracteres aleatórios) e preenchimento de credenciais (usando uma lista de credenciais de usuário comprometidas para invadir um sistema).

Nosso artigo abrangente sobre os diferentes tipos de ataques cibernéticos mostra 16 tipos de ataques que sua equipe deve estar preparada para enfrentar.

Como funciona a limitação de taxa?

Para definir um limite de taxa, um administrador impõe um limite ao número de solicitações que os usuários podem fazer a um servidor ou API dentro de um determinado período de tempo. Normalmente, o mecanismo de limitação de taxa rastreia dois fatores principais:

  • Os endereços IP dos usuários que enviam solicitações.
  • Quanto tempo decorre entre cada solicitação.

A principal métrica para limites de taxas são as transações por segundo (TPS). Se um único endereço IP fizer muitas solicitações em um determinado período (ou seja, ultrapassar seu limite de TPS), a limitação de taxa interromperá a resposta do servidor ou da API. O usuário recebe uma mensagem de erro e não consegue enviar mais solicitações até que o cronômetro seja reiniciado.

A limitação de taxa sempre depende de alguma forma de mecanismo de limitação que retarda ou bloqueia solicitações. Os administradores implementam a limitação de taxa no lado do servidor ou do cliente, dependendo de qual estratégia melhor se adapta ao caso de uso:

  • A limitação de taxa do lado do servidor é mais eficaz na prevenção de sobrecarga e na interrupção de atividades maliciosas.
  • A limitação de taxas do lado do cliente é melhor para gerenciar custos e garantir o uso justo dos recursos.

Muitos administradores também definem limites de taxas com base nos nomes de usuário. Essa abordagem evita que invasores de força bruta tentem fazer login a partir de vários endereços IP.

Preocupado com bots forçando seus nomes de usuário e senhas? Aqui estão 8 estratégias simples, mas altamente eficazes para prevenir ataques de força bruta.

Tipos de limites de taxa

Vejamos os diferentes tipos de limites de taxa que você pode usar para controlar o acesso a um servidor ou API. Lembre-se apenas de que você pode combinar diferentes tipos em uma estratégia híbrida. Por exemplo, você pode limitar o número de solicitações com base em endereços IP e em determinados intervalos de tempo.

Limites de taxa baseados no tempo

Os limites de taxa baseados no tempo operam em intervalos de tempo predefinidos. Por exemplo, um servidor pode limitar as solicitações a um determinado número por período de tempo (como 100 por minuto).

Os limites de taxas baseados no tempo normalmente se aplicam a todos os usuários. Você pode definir esses limites como fixos (os cronômetros fazem contagem regressiva independentemente de quando e se os usuários fazem solicitações) ou deslizantes (a contagem regressiva começa sempre que alguém faz a primeira solicitação).

Limites de taxas geográficas

Os limites de taxas geográficas restringem o número de solicitações provenientes de determinadas regiões. Esses limites são uma excelente escolha ao executar campanhas baseadas em localização. Os administradores conseguem limitar as solicitações de fora do público-alvo e aumentar a disponibilidade nas regiões-alvo.

Esses limites de taxa também são bons para prevenir tráfego suspeito. Por exemplo, você pode prever que os usuários de uma determinada região estarão menos ativos entre 23h e 8h. Você define um limite de taxa mais baixo para esse período, o que restringe ainda mais qualquer invasor que queira causar problemas com tráfego malicioso.

Limites de taxa baseados no usuário

Os limites de taxa baseados no usuário controlam o número de ações que usuários individuais podem realizar em um determinado período de tempo. Por exemplo, um servidor pode limitar o número de tentativas de login que cada usuário pode fazer a 100 por dia.

Os limites baseados no usuário são o tipo mais comum de limitação de taxa. A maioria dos sistemas rastreia o endereço IP ou a chave API do usuário (ou ambos). Se o usuário exceder o limite de taxa definido, o aplicativo negará quaisquer solicitações adicionais até que o contador por usuário seja redefinido.

>

Lembre-se de que esse tipo de limitação de taxa exige que o sistema mantenha as estatísticas de uso de cada usuário. Essa configuração geralmente leva a despesas operacionais e aumenta os custos gerais de TI.

Limitação de taxa de simultaneidade

Os limites de taxa de simultaneidade controlam o número de sessões paralelas que o sistema permite em um determinado período de tempo. Por exemplo, um aplicativo pode impedir mais de 1.000 sessões em um minuto.

Limites de taxa do servidor

A limitação de taxa do servidor ajuda os administradores a compartilhar uma carga de trabalho entre diferentes servidores. Por exemplo, se você executar uma arquitetura distribuída com cinco servidores, poderá usar um limite de taxa para colocar um limite em cada dispositivo.

Se um dos servidores atingir seu limite, o dispositivo o encaminhará para outro servidor ou descartará a solicitação. Essa estratégia é vital para alcançar alta disponibilidade e prevenir ataques DoS direcionados a um servidor específico.

Limitação de taxa baseada em endpoint de API

Esses limites de taxa são baseados nos endpoints de API específicos que os usuários estão tentando acessar. Por exemplo, um administrador pode limitar as solicitações para um endpoint específico a 50 por minuto, seja por questões de segurança ou de sobrecarga.

Saiba mais sobre segurança de endpoint e veja o que é necessário para manter os dispositivos na borda da rede protegidos contra atividades maliciosas.

Algoritmos de limitação de taxa

Aqui estão os algoritmos mais comuns nos quais as empresas confiam para implementar a limitação de taxa:

  • Token bucket: Cada vez que um usuário faz uma solicitação, o sistema remove um token do chamado token bucket. Quando o bucket estiver vazio, o usuário não poderá fazer mais solicitações até que uma recarga redefina o número de tokens de sessão.
  • Greedy token bucket: Este algoritmo permite que os usuários acumulem tokens não utilizados e construam um bucket maior. Os usuários que não utilizam totalmente sua cota usarão mais tokens (ou seja, solicitações) no futuro.
  • Bucket vazado: cada vez que alguém faz uma solicitação, o sistema adiciona um token ao bucket do usuário. Se o intervalo estiver cheio (ou seja, os usuários atingirem o limite definido), o sistema descartará todas as solicitações adicionais. O bucket com vazamento é fácil de implementar em um balanceador de carga e tem alta eficiência de memória.
  • Janela fixa: esse algoritmo limita o número de solicitações que os usuários podem fazer dentro de uma janela de tempo fixa (geralmente um minuto ou uma hora). Por exemplo, o servidor pode atender apenas 100 solicitações entre 11h e 11h01. Às 11h01, a janela é reiniciada.
  • Janela contínua: em vez de usar uma janela de tempo fixa como o algoritmo anterior, este método depende de uma janela contínua. O período só começa quando um usuário faz uma nova solicitação. Por exemplo, se a primeira solicitação chegar exatamente às 10h15:48 e o limite de taxa for de 20 por minuto, o servidor permitirá mais 19 solicitações até 10h16:48.
  • Registro deslizante: Este algoritmo exige que o sistema mantenha um registro com carimbo de data e hora (conjunto ou tabela) de solicitações para cada usuário individual. O sistema calcula a soma dos logs para determinar a taxa de solicitação. Se a taxa exceder a taxa limite, o sistema retém a solicitação; caso contrário, o sistema atenderá a solicitação.

Os principais fatores a serem considerados ao escolher um algoritmo de limitação de taxa são as necessidades exclusivas da sua API e o volume de tráfego esperado. O método escolhido deve evitar sobrecarga e interromper atividades maliciosas, mas também garantir que usuários legítimos usem o serviço sem interrupções.

Como implementar a limitação de taxa?

Abaixo está um guia passo a passo para implementar a limitação de taxa (embora a maneira exata de definir limites dependa de sua pilha de tecnologia específica):

  • Determinar regras de limite de taxa: decida o limite de taxa específico que você usará. Determine o tipo de limite de taxa (com base no tempo, com base em solicitações, etc.), o próprio limite (ou seja, o número de solicitações permitidas) e a duração do limite.
  • Escolha um algoritmo de limitação de taxa: Escolha um algoritmo que melhor atenda às suas necessidades. Em geral, o token bucket é adequado para a maioria dos limites de taxas baseados no usuário. Da mesma forma, a janela fixa é excelente para limites de taxas baseados no tempo.
  • Decida onde implementar o limite de taxa: decida se a equipe deve implementar o limite de taxa no servidor ou no lado do cliente (ou ambos).
  • Implementar o limite de taxa: Em seguida, implemente o algoritmo de limitação de taxa escolhido. Esse processo geralmente envolve um módulo público que fornece funcionalidade de limitação de taxa, embora sua equipe possa precisar escrever algum código personalizado.
  • Teste o limite de taxa: depois de configurado, o mecanismo de limitação de taxa requer testes extensivos. Use uma combinação de testes manuais e automatizados para simular diferentes condições de tráfego. Teste o sistema periodicamente e ajuste as regras conforme necessário para manter os níveis de desempenho elevados.

A implementação da limitação de taxa é um processo simples para a maioria dos casos de uso. Por exemplo, se você estiver usando o Nginx como servidor web e desejar definir um limite de taxa no nível do servidor, você usará o módulo ngx_http_limit_req_module. Basta adicionar o seguinte código ao arquivo de configuração Nginx para configurar limites de taxa com base no endereço IP do usuário:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s;
    ...

server {
    ...
    location /promotion/ {
        limit_req zone=one burst=5;
    }
}

O código acima não permite mais do que 2 solicitações por segundo em média, enquanto os bursts não podem exceder 5 solicitações.

Uma prática defensiva simples, mas altamente eficaz

A limitação de taxa é essencial para a segurança e a qualidade de suas APIs, aplicativos e sites. Deixar de limitar o número de solicitações deixa você vulnerável a ataques baseados em tráfego e leva a um desempenho ruim (o que causa taxas de rejeição mais altas, problemas com retenção de clientes, etc.). Considerando o quão fácil é implementar esta precaução, definir um limite de taxa é uma decisão óbvia para a maioria dos casos de uso.