implementing-api-rate-limiting-and-throttling
Faz seu agente controlar quantas vezes um serviço pode ser acessado. Isso evita sobrecarga e ataques. É útil para manter serviços estáveis e seguros.
O que ela faz
Esta ferramenta ajuda a controlar quantas vezes um usuário pode acessar uma parte de um sistema (API) em um certo período de tempo. Isso evita que o sistema seja sobrecarregado ou usado de forma indevida.
Quando usar
- ✓Proteger logins contra ataques de força bruta.
- ✓Evitar que robôs enviem muitas requisições rapidamente.
- ✓Garantir que todos os usuários tenham acesso justo aos recursos.
Exemplo do que pedir para a IA
“Configure um limite de 100 requisições por minuto para usuários padrão e 10 requisições por minuto para usuários gratuitos na API de busca.”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ela funciona definindo regras sobre quantas requisições são permitidas. Se alguém tentar fazer mais requisições do que o permitido, o sistema o avisará para esperar um pouco antes de tentar novamente.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill implementing-api-rate-limiting-and-throttlingOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/main/skills/implementing-api-rate-limiting-and-throttling/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Implementando Limitação e Estrangulamento de Taxa de API
Quando Usar
- Protegendo endpoints de autenticação contra ataques de força bruta e roubo de credenciais
- Prevenindo abuso de API e esgotamento de recursos por scripts automatizados e bots
- Implementando cotas de uso justo para diferentes níveis de consumidores de API (gratuito, premium, empresarial)
- Defendendo contra ataques de negação de serviço na camada de aplicação
- Atendendo a requisitos de conformidade que exigem controles de prevenção de abuso de API
Não use a limitação de taxa como única defesa contra ataques. Combine com autenticação, autorização e regras de WAF.
Pré-requisitos
- Redis 6.0+ para contadores de limite de taxa distribuídos (ou em memória para implantações de instância única)
- Framework de API (Express.js, FastAPI, Spring Boot ou Django REST Framework)
- Sistema de monitoramento para métricas de limite de taxa (Prometheus, CloudWatch, Datadog)
- Compreensão dos padrões de tráfego normais e uso de pico da API
- Ferramenta de teste de carga (k6, Gatling ou Locust) para validar o comportamento do limite de taxa
Fluxo de Trabalho
Etapa 1: Design da Estratégia de Limitação de Taxa
Defina limites de taxa por categoria de endpoint e nível de usuário:
# Rate limit configuration
RATE_LIMITS = {
# Authentication endpoints (most restrictive)
"auth": {
"login": {"requests": 5, "window_seconds": 60, "by": "ip"},
"register": {"requests": 3, "window_seconds": 300, "by": "ip"},
"forgot_password": {"requests": 3, "window_seconds": 3600, "by": "ip"},
"verify_mfa": {"requests": 5, "window_seconds": 300, "by": "user"},
},
# Standard API endpoints
"api": {
"free": {"requests": 60, "window_seconds": 60, "by": "user"},
"premium": {"requests": 300, "window_seconds": 60, "by": "user"},
"enterprise": {"requests": 1000, "window_seconds": 60, "by": "user"},
},
# Resource-intensive endpoints
"expensive": {
"search": {"requests": 10, "window_seconds": 60, "by": "user"},
"export": {"requests": 5, "window_seconds": 3600, "by": "user"},
"bulk_import": {"requests": 2, "window_seconds": 3600, "by": "user"},
},
# Global limits
"global": {
"per_ip": {"requests": 1000, "window_seconds": 60, "by": "ip"},
"per_user": {"requests": 5000, "window_seconds": 3600, "by": "user"},
},
}
Etapa 2: Limitador de Taxa de Janela Deslizante (Redis)
import redis
import time
import hashlib
from functools import wraps
from flask import Flask, request, jsonify, g
app = Flask(__name__)
redis_client = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)
class SlidingWindowRateLimiter:
"""Limitador de taxa de janela deslizante usando conjuntos ordenados do Redis."""
def __init__(self, redis_conn):
self.redis = redis_conn
def is_allowed(self, key, max_requests, window_seconds):
"""Verifica se a solicitação é permitida e a registra."""
now = time.time()
window_start = now - window_seconds
pipe = self.redis.pipeline()
# Remove entradas expiradas
pipe.zremrangebyscore(key, 0, window_start)
# Conta as solicitações na janela atual
pipe.zcard(key)
# Adiciona a solicitação atual
pipe.zadd(key, {f"{now}:{hashlib.md5(str(now).encode()).hexdigest()[:8]}": now})
# Define o TTL para a chave
pipe.expire(key, window_seconds + 1)
results = pipe.execute()
current_count = results[1]
if current_count >= max_requests:
# Calcula o retry-after
oldest = self.redis.zrange(key, 0, 0, withscores=True)
if oldest:
retry_after = int(oldest[0][1] + window_seconds - now) + 1
else:
retry_after = window_seconds
return False, current_count, max_requests, retry_after
return True, current_count + 1, max_requests, 0
rate_limiter = SlidingWindowRateLimiter(redis_client)
def rate_limit(max_requests, window_seconds, key_func=None):
"""Decorador para limitar a taxa de endpoints de API."""
def decorator(f):
@wraps(f)
def wrapped(*args, **kwargs):
# Determina a chave de limite de taxa
if key_func:
identifier = key_func()
elif hasattr(g, 'user_id'):
identifier = f"user:{g.user_id}"
else:
identifier = f"ip:{request.remote_addr}"
key = f"ratelimit:{request.endpoint}:{identifier}"
allowed, current, limit, retry_after = rate_limiter.is_allowed(
…
Perguntas frequentes
O que é 'rate limiting'?
'Rate limiting' é o controle da taxa de requisições que um usuário pode fazer a um serviço em um determinado tempo.
O que é 'throttling'?
'Throttling' é a ação de reduzir ou limitar a taxa de requisições quando um limite é atingido.
Por que usar limites de requisição?
Para proteger o sistema contra sobrecarga, ataques e garantir um uso justo para todos.
Detalhes
Descrição original do autor
Implements API rate limiting and throttling with token bucket, sliding window, and fixed window algorithms, configuring per-user, per-IP, and per-endpoint limits via Redis-backed counters, API gateway plugins, or middleware, and returning proper HTTP 429 responses with Retry-After headers. Use when setting up request quota management or preventing brute force, credential stuffing, and resource exh
Popularidade
- Estrelas no GitHub
- 35 mil
- Posição no ranking
- #5825
- Licença
- Apache-2.0
- Atualizada em
- 31/08/2026
Comentários
- …
Mais skills deste repositório
abusing-dpapi-for-credential-access
Dá ao seu agente de IA instruções prontas para uma tarefa específica, para ele fazer melhor e mais rápido.
mukul975/Anthropic-Cybersecurity-Skills
abusing-shadow-credentials-for-privesc
Ensina seu agente de IA a escrever textos claros e bem estruturados.
mukul975/Anthropic-Cybersecurity-Skills
achieving-cmmc-level-2-compliance
Ajuda seu agente a preparar um ambiente para conformidade com CMMC Nível 2. Ele implementa requisitos de segurança e gerencia a documentação necessária.
mukul975/Anthropic-Cybersecurity-Skills
acquiring-disk-image-with-dd-and-dcfldd
Ajuda seu agente a criar cópias exatas de discos rígidos. Isso é útil para garantir que nenhuma informação seja perdida ou alterada durante investigações.
mukul975/Anthropic-Cybersecurity-Skills
Skills parecidas
api-connector-builder
Faz seu agente construir novas conexões com APIs seguindo o padrão já existente. Use quando precisar adicionar mais uma integração sem criar um novo jeito de fazer.
affaan-m/ECC
api-design
Ajuda seu agente a projetar APIs REST seguindo as melhores práticas. É útil para definir como as APIs se comunicam, como os erros são mostrados e como organizar os dados.
affaan-m/ECC
backend-patterns
Ajuda seu agente com padrões de arquitetura do lado do servidor e otimização de banco de dados. É útil para construir ou revisar o código que roda no servidor.
affaan-m/ECC