Header Ads

Como avaliar solicitações de limite no Blazor / ASP.NET Core

Se você está criando uma API ou site público, provavelmente está preocupado com o desempenho. A limitação de taxa pode ajudar a prevenir abusos de ataques DDoS básicos e é muito fácil de configurar para aplicativos Blazor / ASP. NET Core.

Por que solicitações de limite de taxa?

Existem muitos motivos para solicitações de limite de taxa. A maioria dos serviços provavelmente deve definir algum tipo de limite de taxa, porque nenhum ser humano razoável fará 100 solicitações por segundo durante dez minutos direto. Por padrão, seu aplicativo responderá a todas as solicitações, portanto, definir um limite razoável é uma boa ideia.

Claro, seu provedor de nuvem também pode ter proteção DDoS. Isso geralmente protegerá bem contra ataques das camadas 3 e 4 direcionados ao seu servidor. No entanto, você ainda vai querer ter certeza de que seu servidor faz tudo o que pode para bloquear o acesso de invasores.

Você também tem a opção de definir o limite muito mais baixo para limitar as solicitações em APIs públicas. Por exemplo, talvez um determinado ponto de extremidade leve muito processamento para responder à solicitação. Você pode querer limitar esse endpoint para que nenhum endereço IP possa fazer mais do que algumas solicitações a cada dois segundos, limitando o estresse em seu servidor / banco de dados.

Configurando o limite de taxa no ASP. NET Core

O Blazor como uma estrutura é construído em cima do ASP. NET Core, que lida com todas as coisas subjacentes para executar um servidor HTTP e responder às solicitações. Portanto, você precisará configurar a limitação de taxa para ASP. NET Core. As mesmas etapas se aplicam a qualquer pessoa que não use o Blazor.

Publicidade

A limitação de taxa não é um recurso padrão no ASP. NET Core, infelizmente. No entanto, existe um pacote NuGet muito popular, AspNetCoreRateLimit, que faz o trabalho muito bem. Você pode instalá-lo clicando com o botão direito do mouse em seu projeto no Visual Studio e selecionando “ Gerenciar pacotes NuGet … ”:

Pesquise AspNetCoreRateLimit e instale-o.

Existem algumas maneiras de limitar a taxa. Se você estiver usando uma API que precisa de chaves, recomendamos a limitação de taxa com base na chave de API, que abrange todos os casos. Para a maioria das pessoas, a limitação de taxa com base no endereço IP provavelmente é adequada e é o padrão recomendado por AspNetCoreRateLimit.

Você precisará adicioná-lo como um serviço ao ASP. NET. Todos os serviços são configurados em Startup. cs, que os adiciona com a função ConfigureServices (IServiceCollection services).

Existem alguns serviços para configurar. A primeira função configura os serviços para carregar as configurações de seu arquivo de configuração. Você também deseja adicionar o cache de memória da Microsoft, caso ainda não o tenha feito. Em seguida, você precisará configurar IpRateLimiting do arquivo JSON e, em seguida, adicionar o limitador de taxa.

// necessário carregar a configuração de appsettings. json services. AddOptions & # 40; & # 41 ;;   // necessário armazenar contadores de limite de taxa e serviços de regras de IP. AddMemoryCache & # 40; & # 41 ;;   // carregue a configuração geral de appsettings. json services. Configure & # 40; Configuration. GetSection & # 40; " IpRateLimiting " & # 41; & # 41 ;;   // injeta o contador e os armazenamentos de regras nos serviços. AddInMemoryRateLimiting & # 40; & # 41 ;;   // configuração (resolvedores, construtores de chave de contador) services. AddSingleton < IRateLimitConfiguration, RateLimitConfiguration > & # 40; & # 41 ;;

Também no Startup. cs, você &’ precisará configurar o construtor do aplicativo para usar a limitação da taxa de IP.

 app. UseIpRateLimiting (); 

Lembre-se de que isso usa limitação de taxa na memória, que é por instância. Se você estiver fazendo o balanceamento de carga de seu aplicativo, precisará usar um armazenamento de memória distribuída como o Redis, para o qual este pacote também tem suporte.

Configurando o limite de taxa

Depois de adicionado ao ASP. NET, você precisará acessar o arquivo de configuração appsettings. json para defini-lo. A configuração se parece com o seguinte:

 "IpRateLimiting": {"EnableEndpointRateLimiting": false, "StackBlockedRequests": true, "RealIpHeader": "X-Real-IP", "ClientIdHeader": "X-ClientId", "HttpStatusCode": 429 , "IpWhitelist": ["127.0.0.1", ":: 1/10", "192.168.0.0/24"], "EndpointWhitelist": ["get: / api / license", "*: / api / status "]," ClientWhitelist ": [" dev-id-1 "," dev-id-2 "]," GeneralRules ": [{" Endpoint ":" * "," Period ":" 1s "," Limit " : 2}, {"Ponto final": "*", "Período": "15m", "Limite": 100}, {"Ponto final": "*", "Período": "12h", "Limite": 1000 }, {"Ponto final": "*", "Período": "7d", "Limite": 10000}]} 

Publicidade

Em primeiro lugar, se você planeja limitar a taxa de certos endpoints de maneira diferente, você &’ desejará ativar EnableEndpointRateLimiting, que é falso por padrão.

StackBlockedRequests fará com que todas as solicitações bloqueadas sejam contabilizadas no contador. Basicamente, com isso desativado, qualquer pessoa que fizer solicitações repetidamente receberá X respostas por período. Com ele ativado, eles trabalharão no máximo de respostas muito rapidamente e, em seguida, não serão respondidos novamente.

RealIpHeader e ClientIdHeader usados ​​quando seu servidor está atrás de um proxy reverso, que é uma configuração comum. Como as solicitações sempre virão do servidor proxy, o proxy define um cabeçalho com as informações reais do usuário. Você precisará verificar seu proxy e garantir que este cabeçalho esteja definido corretamente, ou o limitador de taxa tratará todos como o mesmo IP.

Então, existem três listas de permissões, uma para IPs, IDs de cliente e terminais. Você pode removê-los se não precisar deles.

Então, você precisará configurar cada ponto de extremidade, bem como um período e limite. Um curinga cobrirá tudo e é a única coisa que funciona com EnableEndpointRateLimiting definido como false. Se não for, você pode definir endpoints usando, incluindo curingas, portanto *: / api / values ​​corresponderá a todas as solicitações GET e POST para / api / values.

Publicidade

Você desejará ter certeza de que seu endpoint corresponde a um arquivo, não a um diretório. No meu caso, *: / download / * / * era um endpoint válido, mas *: / download / * / * / não era, devido à barra final.

Esta configuração padrão inclui uma lista de permissões de IP para localhost, que você precisará comentar se estiver fazendo testes. Porém, você deve ser capaz de testar sua configuração definindo um limite muito baixo, como 5 por minuto, e fazendo várias solicitações. Você deve obter este erro, “ Cota de chamadas de API excedida, ” o que significa que está funcionando corretamente.

Há muito mais que este pacote pode fazer, então se você tiver necessidades mais específicas do que isso, recomendamos verificar a documentação e ver o que é possível.

Nenhum comentário