Skip to content

Instantly share code, notes, and snippets.

@felipebastosweb
Created June 6, 2025 22:41
Show Gist options
  • Save felipebastosweb/3139b575b293f11117f94851294e19d4 to your computer and use it in GitHub Desktop.
Save felipebastosweb/3139b575b293f11117f94851294e19d4 to your computer and use it in GitHub Desktop.
Rate Limite em C# segundo o Gemini
/*
Em Blazor, rate limit (limitação de taxa) é a prática de restringir a frequência com que uma ação pode ser repetida dentro de um determinado período. É usado para proteger contra uso excessivo e ataques de força bruta, limitando o número de solicitações ou ações que um usuário (ou um cliente) pode fazer num determinado período de tempo.
Exemplos e Implementação:
1. Limitar o número de tentativas de login:
Se um usuário tenta fazer login muitas vezes com uma combinação incorreta de nome de utilizador/senha, o sistema pode bloquear temporariamente o acesso daquele utilizador.
Em Blazor, isso pode ser implementado verificando o número de tentativas de login recentes para um determinado endereço IP ou utilizador e bloqueando se exceder o limite.
2. Limitar o número de chamadas API:
Se um usuário está fazendo muitas chamadas a uma API, o sistema pode estar a ser sobrecarregado.
Para evitar isso, pode-se configurar um limite de chamadas por segundo, minuto ou hora.
Em Blazor, pode-se usar o middleware de Rate Limiting do ASP.NET Core.
Código de Exemplo (ASP.NET Core com middleware):
Código
*/
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.RateLimiting;
using System;
using System.Collections.Concurrent;
using System.Threading.Tasks;
using System.Timers;
using Microsoft.Extensions.Hosting;
using System.Threading;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddRateLimiter(options =>
{
options.AddFixedWindowLimiter(
"fixed",
options =>
{
options.Window = TimeSpan.FromMinutes(1); // Limite por minuto
options.PermitLimit = 10; // 10 solicitações por minuto
options.QueueLimit = 0; // Sem fila
}
);
});
services.AddControllers();
}
public void Configure(IApplicationBuilder app)
{
app.UseRouting();
app.UseRateLimiter();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers(); // Map a controller
});
}
}
// Controller (exemplo)
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.RateLimiting;
using System.Threading.Tasks;
[ApiController]
[Route("api/[controller]")]
public class MyApiController : ControllerBase
{
[HttpGet]
[DisableRateLimiting] // Se necessário, desabilitar para algumas endpoints
public async Task<IActionResult> Get()
{
// ... seu código
return Ok("Solicitação bem-sucedida");
}
}
/*
Considerações:
Tipos de Limitação:
Existem vários tipos de rate limiting, como o baseado em janela fixa, janela deslizante, token bucket, etc.
Middleware:
O middleware de Rate Limiting pode ser facilmente integrado no ASP.NET Core para implementar limitações de taxa.
Configuração:
A configuração do rate limiting pode ser feita através do middleware ou com base em código.
Desabilitação:
É possível desabilitar o rate limiting em certos endpoints ou para certas funções, se necessário.
O uso de rate limit é essencial para proteger a sua aplicação e melhorar a experiência do utilizador, evitando comportamentos maliciosos e sobrecarga do servidor.
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment