📝 BLOG

API Rate Limiting: Throttling, Quota e Protezione DDoS

L'API rate limiting previene l'abuso e il sovraccarico della vostra API. Questa guida copre le strategie di rate limiting, il throttling, la gestione delle quote e la protezione DDoS.

Ultimo aggiornamento:

Preparato da: Gsetsoft

API Rate Limiting: Throttling, Quota e Protezione DDoS

Cos'è il Rate Limiting?

Il rate limiting è la limitazione del numero di richieste che possono essere fatte in un periodo di tempo specifico (secondo, minuto, ora).

Scopi: Prevenire l'abuso dell'API, garantire un uso equo, proteggere le risorse del server, ridurre gli attacchi DDoS.

Quando il rate limit viene superato: Restituisce il codice di stato HTTP 429 (Too Many Requests). Specifica quando riprovare con il header Retry-After.

Il rate limiting aumenta la disponibilità e l'affidabilità dell'API. Assicura la conformità SLA (Service Level Agreement).

Algoritmi di Rate Limiting

Fixed Window: Contatore mantenuto in una finestra di tempo fissa (es. 100 richieste al minuto). Semplice ma problema di boundary (spike ai limiti della finestra).

Sliding Window Log: Memorizzate il timestamp di ogni richiesta. Contate le richieste negli ultimi N secondi. Più preciso ma usa più memoria.

Sliding Window Counter: Ibrido di fixed window e sliding window log. Meno memoria, risultato più preciso.

Token Bucket: I token vengono prodotti a un tasso specifico. Ogni richiesta consuma un token. Fornisce supporto burst.

Leaky Bucket: Le richieste vengono aggiunte alla coda e elaborate a un tasso fisso. Fornisce il smoothing del traffico.

Strategie di Rate Limiting

Basato su IP: Limite basato sull'indirizzo IP del richiedente. Semplice ma gli utenti dietro NAT (stesso IP) hanno problemi.

Basato su utente: Limite basato sull'utente autenticato. Più equo. Identificate l'utente con API key o JWT.

Basato su endpoint: Limite diverso per ogni endpoint. /login (5/min) vs /users (100/min).

Tiered: Limiti diversi per diversi tipi di utenti. Free (100/min), Pro (1000/min), Enterprise (10000/min).

Global vs per-endpoint: Limite globale (per tutta l'API) + limite per-endpoint. Usate entrambi insieme.

Implementazione

Redis: Memorizzate i contatori di rate limit in Redis. Contatore atomico con i comandi INCR e EXPIRE. Ideale per il rate limiting distribuito.

Middleware: Middleware Express.js (express-rate-limit), Django (django-ratelimit), Spring Boot (Bucket4j).

API Gateway: Rate limiting con Kong, AWS API Gateway, Cloudflare. Gestione e monitoraggio centralizzati.

Response headers: Restituite le info di limite con gli header X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Client SDK: Le librerie client leggono le info di rate limit ed effettuano automaticamente retry e backoff.

Protezione DDoS

Il rate limiting da solo non fornisce protezione DDoS. Gli attacchi DDoS arrivano in volumi che superano il rate limit.

Cloudflare: Protezione DDoS, WAF (Web Application Firewall), gestione dei bot. Tier gratuito disponibile.

AWS Shield: Protezione DDoS per i servizi AWS. Standard (gratuito) e Advanced (a pagamento).

Reputazione IP: Bloccate gli IP con cattiva reputazione. Usate liste di reputazione come Spamhaus, AbuseIPDB.

CAPTCHA: Verificate il traffico sospetto con CAPTCHA. reCAPTCHA v3 (invisibile) o hCaptcha.

Geo-blocking: Bloccate il traffico da paesi specifici (se necessario).

Migliori Pratiche

Graceful degradation: Date un messaggio di errore chiaro all'utente quando il rate limit viene superato. Specificate quando riprovare con il header Retry-After.

Monitoraggio: Monitorate gli hit di rate limit. Un aumento anomalo può indicare un attacco o un bug.

Whitelist: Mettete in whitelist gli IP di fiducia (servizi interni, API di partner).

Documentazione: Dichiarate chiaramente la politica di rate limit nella documentazione dell'API. Info di limite, finestra e retry.

Test: Testate il comportamento del rate limit con il load testing. Usate k6, Artillery o JMeter.

Strumenti correlati

La tua scelta sulla privacy

I cookie essenziali gestiscono sicurezza e sessioni. Contiamo le visite di base; con il consenso attiviamo analisi aggiuntive. Informativa cookie