EMZETT.
Giriş yap

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, Nginx limit_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-After ve isteğe bağlı RateLimit-Limit/Remaining/Reset baş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