Hız sınırlama: istekleri sınırlamak ve kötüye kullanımı yavaşlatmak
Kısaca: Hız sınırlama, bir istemcinin bir arayüzü belirli bir sürede kaç kez çağırabileceğini kısıtlar; aşırı yüke, kaba kuvvete ve scraping’e karşı korur ve HTTP 429 ile yanıtlanır.
Biraz daha ayrıntılı: Sınırlar olmadan tek bir istemci (veya bot) sunucuyu, veri tabanını ve faturayı yükleyebilir. Tipik hedefler: giriş (parola tahmini), kayıt/parola sıfırlama (posta spam’i), pahalı uç noktalar (arama, yapay zekâ), scraping, herkese açık bir API’nin adil kullanımı.
Ayrıntılı
Algoritmalar
- Sabit pencere: dakikada en fazla 100 istek; basit, ancak pencere sınırında tepe yapar (hızlı ardışıklıkta 2בe kadar).
- Kayan pencere: daha doğru, biraz daha karmaşık.
- Token bucket: kova r hızıyla dolar, her istek bir token’a mal olur; kova boyutuna kadar kısa patlamalara izin verir.
- Leaky bucket: sabit bir çıkış hızına düzler.
- Eşzamanlılık sınırı: kullanıcı başına en fazla N paralel istek.
Kim sayılır?
Bir anahtar seç: IP adresi (dikkat: NAT/okul ağları bir IP paylaşır; proxy’lerin arkasında gerçek IP’yi X-Forwarded-For’dan yalnızca güvenilir proxy’lerden oku), kullanıcı hesabı, API anahtarı, kombinasyon (örneğin girişte hesap + IP). Anonim kullanıcılar için daha sıkı, oturum açmış/ödeme yapan kullanıcılar için daha cömert. Giriş koruması: ek olarak kullanıcı adı başına sınırla, artan gecikmeler, captcha, bildirimle kilitleme.
Uygulama
- Redis’te sayaçlar (
INCR+EXPIRE) veya kütüphaneler (Upstash Ratelimit,express-rate-limit, Nginxlimit_req, Cloudflare/WAF kuralları). - Sunucusuz/birden çok örnek: sayaçlar süreç belleğinde değil, merkezî olarak (Redis, veri tabanı) tutulur.
- HTTP 429 Too Many Requests ile
Retry-Afterve isteğe bağlıRateLimit-Limit/Remaining/Resetbaşlıklarıyla yanıtla. - İstemciler üstel geri çekilme + jitter ile yeniden denemelidir.
- Ek olarak zaman aşımları, boyut sınırları, sayfalama ve kotalar (günlük/aylık).
Sınırlar ve uygulama
Hız sınırlama tek başına dağıtık saldırıları (DDoS) durdurmaz: bunun için CDN/WAF, bot tespiti, üst akış koruması. Meşru kullanıcıları da dışarıda bırakma: sınırları gerçek ölçümlerden türet, hata mesajı anlaşılır olsun, kalıcı aşımda günlükleme/alarm. Sınırları test et, sınırları API belgelerinde belgele. Gizlilik: IP adresleri kişisel verilerdir, kısa süre sakla.
Ayrıca bak: Debounce ve throttle