IHS Strategic
Tüm Blog Yazıları
HowTo09 Eylül 2026•2 dk okuma

Web Uygulamalarında Rate Limiting ile API Kötüye Kullanımını Engelleme

Web Uygulamalarında Rate Limiting ile API Kötüye Kullanımını Engelleme

S

Sistem Yöneticisi

Kıdemli Yazılım Mimarı

{ "title": "Web Uygulamalarında Rate Limiting Rehberi: API Kötüye Kullanımını Önleme", "slug": "web-uygulamalarinda-rate-limiting-rehberi-api-guvenligi", "summary": "Modern web sistemlerinde API kötüye kullanımını engelleyen rate limiting rehberi. Algoritmalar, mimari tercihler ve adım adım uygulama.", "content": "

Modern Web Sistemlerinde Rate Limiting Neden Zorunlu?

DDoS, brute-force, web scraping ve kontrolsüz bot trafiği sunucu kaynaklarını tüketir. Dijital ajans ekipleri ve yazılım mühendisleri için modern web trendleri veri güvenliğini ve API erişilebilirliğini ilk sıraya koyar. Doğru yapılandırılmış rate limiting, altyapı maliyetini düşürür, sistem kesintilerini önler.

Temel Rate Limiting Algoritmaları

1. Token Bucket

Kova sabit hızla token ile dolar. Her istek bir token harcar. Kova boşsa istek reddedilir. Kısa süreli trafik patlamalarına (burst) izin verir.

2. Leaky Bucket

İstekler kuyruğa girer, sabit hızla işlenir. Kuyruk dolarsa yeni istekler atılır. Çıkış trafiğini pürüzsüzleştirir.

3. Fixed Window Counter

Zaman sabit pencerelere bölünür (örn. 1 dakika). Sayaç limiti aşarsa istek reddedilir. Pencere sınırlarında 2 katı trafik geçiş riski taşır.

4. Sliding Window Log / Counter

Zaman damgalarını dinamik işler. Fixed window açığını kapatır. Bellek kullanımı dengelidir, modern web servislerinde standart tercihtir.

Adım Adım Rate Limiting Uygulama

Adım 1: Tanımlayıcı (Identifier) Belirleme

Limiti neye göre uygulayacağınızı seçin:

  • IP Adresi: Anonim API uç noktaları için. (NAT arkasındaki kullanıcılar için dezavantajlıdır).
  • API Anahtarı / Bearer Token: Kimliği doğrulanmış kullanıcılar için en güvenilir yöntem.
  • Endpoint Bazlı: Ağır maliyetli sorgular (örn. /export, /search) için özel limitler.

Adım 2: Dağıtık Sayaç Katmanı (Redis)

Çoklu sunuculu mimarilerde sayaç verisi merkezi olmalıdır. Redis atomik komutları (INCR, EXPIRE) yarış durumlarını (race condition) önler.

Adım 3: Nginx Seviyesinde Hızlı Bloklama

Uygulama sunucusuna yük binmeden ters vekil (reverse proxy) katmanında istekleri filtreleyin:

http {
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

    server {
        location /api/ {
            limit_req zone=api_limit burst=20 nodelay;
            proxy_pass http://backend_app;
        }
    }
}

Adım 4: Standart HTTP Başlıkları ve 429 Yanıtı

İstemci limit aştığında 429 Too Many Requests durum kodu ve bilgilendirici başlıklar dönün:

  • X-RateLimit-Limit: İzin verilen kota.
  • X-RateLimit-Remaining: Kalan kota miktarı.
  • X-RateLimit-Reset: Kotanın sıfırlanacağı Unix epoch saniyesi.
  • Retry-After: Tekrar denemeden önce beklenecek saniye.

En İyi Pratikler

Güvenlik katmanında tek limit yetersizdir. Global, kullanıcı bazlı ve uç nokta bazlı kademeli kısıtlamalar uygulayın.
  • Dinamik Limitler: Güvenilir veya ücretli kullanıcılara daha yüksek kotalar tanımlayın.
  • Circuit Breaker Entegrasyonu: Redis çökerse API trafiğini tamamen kesmeyin; fail-open moduna geçin ve log üretin.
", "schema_type": "HowTo", "suggested_tags": [ "rate limiting", "api guvenligi", "rehber", "modern web", "dijital ajans", "trendler", "backend" ] }