Limitação de taxa e verificação de velocidade

Ultimamente, tenho visto o seguinte pequenos sinais estranhos aparecem nas vitrines das lojas da cidade.

Limitador de taxas 7-11

Todas as placas têm várias formas disso impressas nelas:

Somente 3 alunos de cada vez na loja, por favor

Tiramos essa foto em uma loja de conveniência 7-11 que, por acaso, fica perto de uma escola de ensino médio, então talvez o problema seja particularmente grave lá. Mas mesmo mais longe na cidade, as mesmas placas aparecem com uma regularidade perturbadora. Imagino que os proprietários das lojas devem considerar essas regras necessárias porque:

  • estudantes adolescentes são mais propensos a furtar do que a maioria dos clientes
  • Com muitos estudantes adolescentes na loja, é difícil para os proprietários ficarem de olho em todos, o que aumenta ainda mais a probabilidade de furto.

Estou apenas supondo; não sou proprietário de uma loja. Mas, assim como a placa “proibido elefantes”, ela deve estar lá para resolver um problema real.

Quando o senhor entra em um restaurante e vê uma placa que diz “Proibida a entrada de cães”, pode pensar que essa placa é puramente proscritiva: O Sr. Restaurante não gosta de cachorros por perto e, por isso, quando construiu o restaurante, colocou essa placa. Se fosse só isso, também haveria uma placa “Proibido cobras”; afinal, ninguém gosta de cobras. E uma placa de “Proibido Elefantes”, porque eles quebram as cadeiras quando se sentam. O verdadeiro motivo pelo qual essa placa está lá é histórico: é um marco histórico que indica que as pessoas costumavam tentar trazer seus cães para o restaurante

Todos esses sinais são suficientes para me fazer questionar a ética dos alunos do ensino médio em grupos de 3 ou mais. Embora, para ser justo, eu já tenha visto alguns alunos de pós-graduação com aparência muito duvidosa.

Na verdade, esses tipos de limites são em toda parte; eles só não são tão óbvios porque muitas vezes não há uma trilha de sinalização a ser seguida.

  • A maioria dos caixas eletrônicos só permite que o senhor saque no máximo $300 em um dia.
  • As contas de e-mail gratuitas geralmente limitam o número de e-mails que podem ser enviados por dia.
  • Os provedores de Internet limitam as velocidades individuais de download e upload para garantir que não haja excesso de largura de banda.
  • Há um limite máximo de quantos Xbox Live Points o senhor pode adicionar à sua conta por dia. (Todas as mais de 500 músicas do Rock Band não vão se baixar sozinhas, afinal de contas).

Tenho certeza de que o senhor pode pensar em muitos outros exemplos do mundo real. Eles estão todos ao redor do senhor.

Também há pessoas que agem como grupos de estudantes adolescentes desvairados on-line, e lidamos com eles da mesma forma: com a impondo limites de taxas! Considere como O Google limita qualquer endereço IP que esteja enviando “muitas” solicitações de pesquisa:

Vários fatores podem acionar a mensagem de desculpas.

erro do google: lamentamos, limitador de taxa de pesquisa com captcha

Geralmente, isso se deve a computadores infectados ou roteadores DSL que fazem proxy do tráfego de pesquisa por meio de sua rede – isso pode ocorrer em casa ou até mesmo em um local de trabalho onde um ou mais computadores podem estar infectados. Ferramentas de classificação de SEO excessivamente agressivas também podem acionar essa mensagem. Em outros casos, vimos worms que se autopropagam e usam a pesquisa do Google para identificar servidores da Web vulneráveis na Internet e, em seguida, explorá-los. Os sistemas explorados, por sua vez, pesquisam no Google por mais servidores da Web vulneráveis e assim por diante. Isso pode levar a um aumento notável nas consultas de pesquisa e sorry é um dos nossos mecanismos para lidar com isso.

Eu fiz um pouco de raspagem do Google uma vez para um pequeno projeto de pesquisa, mas nunca me deparei com o limitador CAPTCHA. Acho que essa entrada é anterior ao seu aparecimento. Mas isso faz com que o senhor se pergunte quais são os volumes de pesquisa típicos e como eles são calculados. Determinar quanto é “demais”: essa é a arte da limitação de taxas. É uma questão complicada, mesmo para o proprietário da loja:

  • Será que três estudantes moralmente falidos não poderiam furtar tão bem quanto quatro?
  • Como o senhor sabe quem é estudante? O senhor se baseia apenas na percepção da idade?
  • Esperamos que essa regra seja autoaplicável? O quarto aluno entrará na loja, identificará três outros alunos e decidirá ir embora?

A limitação da taxa nem sempre é uma ciência precisa. Mas é necessáriomesmo com os falsos positivos — considere quão perigosa é uma entrada de login sem limites de tentativas fracassadas pode ser. Isso é especialmente verdadeiro quando seu código está conectado à Internet. Os alunos humanos podem ser um problema, mas há um limite prático para o número de alunos que cabem em uma loja e a velocidade com que eles podem fisicamente roubar seu estoque. Mas E se esses “alunos” fossem um número infinito de programas de computador, capazes de roubar itens de sua loja on-line a uma velocidade limitada apenas pela largura de banda da rede? Sua loja seria limpa em questão de minutos. Talvez até em segundos!

Não ter nenhum tipo de limitação de taxa em seu aplicativo Web é um convite aberto ao abuso. Mesmo a mais inócua das ações do usuário, se realizada com rapidez suficiente e por um número suficiente de usuários, pode ter efeitos potencialmente desastrosos.

Mesmo depois de instituir um limite de taxa, o senhor ainda pode ter problemas. No Stack Overflow, nós projetado para o mal. Temos um CAPTCHA de limitação de taxa no estilo do Google, juntamente com uma variedade de outras técnicas para derrotar bots. Até agora, elas têm funcionado bem. Mas o que não levamos em conta foi que um determinado (e aparentemente ultra-originado) humano usuário poderia sentar-se lá e resolver CAPTCHAs o mais rápido possível para fazer spam no site.

E assim nasceu um novo limite baseado no usuário. Suponho que poderíamos criar uma pequena placa e pendurá-la do lado de fora de nossa loja virtual:

Apenas uma pergunta por novo usuário a cada 10 minutos, por favor.

Há algumas classes de limitação de taxa ou verificação de velocidade que o senhor pode fazer:

  1. Por usuário ou chave de API. Garanta que qualquer conta de usuário ou titular de chave de conta de API possa executar apenas (n) ações por minuto. Em geral, isso é bastante seguro, embora não o proteja de um usuário que automatiza a criação de 100 contas de marionetes para cumprir suas ordens. Tudo depende do grau de rigor com que o senhor vincula a identidade à chave de API ou ao usuário; é possível banir facilmente ou, na pior das hipóteses, rastrear os culpados e pedir que desistam.
  2. Por endereço IP. Garante que qualquer endereço IP específico só possa executar (n) ações por minuto. Isso funciona bem no caso típico, mas pode causar problemas para vários usuários que estejam por trás de um proxy que os faça aparecer para o senhor como o “mesmo” endereço IP. Esse é o único método possível em sites anônimos, como o Craigslist, e definitivamente funciona, porque Já fui vítima disso. Exemplos de implementações são mod_evasive para o Apache, ou o Módulo de restrição de IP dinâmico do IIS7.
  3. Por ação global. Garante que uma determinada ação só possa ocorrer (n) vezes por minuto. É uma espécie de opção nuclear, portanto, obviamente, deve ser usada com cuidado. Pode fazer sentido para as funções de administrador do “grande botão vermelho de ativação”, que devem ser extraordinariamente raras, até que um usuário mal-intencionado obtenha direitos de administrador e comece a apertar esse grande botão vermelho várias vezes.

Fiquei chocado com a falta de informações abrangentes sobre limitação de taxa e verificação de velocidade para desenvolvedores de software, porque eles são sua primeira e mais importante linha de defesa contra um amplo espectro de possíveis ataques. É incrível a quantidade de ataques que o senhor pode atenuar ou até mesmo derrotar ao instituir a limitação da taxa básica.

Dê uma boa olhada em seu próprio site: como ele lidaria com um bando de estudantes entediados e moralmente ambíguos?