RateShield: Guida anti-abuso
#python#automation#microsaas
Proteggi le API dagli attacchi brute-force e dal bot scraping senza i costi elevati delle soluzioni SaaS. Questa guida d'ingegneria avanzata per Go & Docker offre un rate limiter a zero dipendenze e con latenza sub-millisecondo dotato di tarpitting dinamico, evitando la necessità di cluster Redis. Include benchmark completi e il deployment Docker pronto all'uso della CLI di RateShield.
Leggi l'approfondimento tecnicoRateShield: Rate Limiting Anti-Abuso Sub-Millisecondo Senza Redismain.pymain.py — estratto d'esempio nello stile del tool
#!/usr/bin/env python3
"""
RateShield Engine & CLI
High-performance, zero-dependency API rate limiter and dynamic tarpitting engine.
Protects endpoints against brute-force attacks and bot scraping without requiring
external memory stores like Redis.
Features:
- Sub-millisecond token-bucket algorithm with sub-second precision
- Dynamic tarpitting with exponential backoff delays for abusive callers
- Sliding window state management with deterministic background pruning
- Zero external dependencies using Python 3.8+ standard library
- Full telemetry and JSON structured audit logging
Usage:
$ python main.py --host 0.0.0.0 --port 8080 --rate 100/s
$ python main.py inspect --ip 192.168.1.1
"""
from dataclasses import dataclass, field
from enum import Enum, auto
import logging
import time
from typing import Dict, Optional, Tuple
class ShieldAction(Enum):
"""Decision outcome generated by the rate limiter for an incoming request."""
ALLOW = auto()
TARPIT = auto()
BLOCK = auto()
@dataclass
class ClientState:
"""Tracks state and token bucket levels for a given client identifier."""
tokens: float
last_update: float
violation_count: int = 0
tarpit_delay_sec: float = 0.0
class RateShieldEngine:
"""Core rate limiting and dynamic tarpitting execution engine."""
def __init__(self, capacity: float, refill_rate: float) -> None:
self.capacity = capacity
self.refill_rate = refill_rate
self._clients: Dict[str, ClientState] = {}
self._logger = logging.getLogger("rateshield")
# ... the full file ships with your download