Pular para o conteúdo
Skillpedia
APIs e servidores (backend)35 mil · #5825

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

https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/implementing-api-rate-limiting-and-throttling/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/implementing-api-rate-limiting-and-throttling/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-throttling

Ou 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.md
Conteú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

repo: mukul975/Anthropic-Cybersecurity-Skills

Popularidade

Estrelas no GitHub
35 mil
Posição no ranking
#5825
Licença
Apache-2.0
Atualizada em
31/08/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas