Furkan KapukayaYazılım geliştirme
Backend, API ve Veritabanı2 dk okuma

Rate Limiting Nedir? API ve Formları Kötüye Kullanıma Karşı Korumak

Rate limiting'in amacı, sabit pencere, kayan pencere ve token bucket algoritmaları, ASP.NET Core'daki yerleşik sınırlayıcılar, giriş ve form korumasında kullanım ve doğru limit belirleme.

Bir API'ye veya giriş formuna saniyede yüzlerce istek geldiğinde ne olur? Sunucu yavaşlar, maliyetler artar, parola tahmin saldırıları kolaylaşır. Rate limiting (istek sınırlama), belirli bir sürede kabul edilecek istek sayısını sınırlayarak bu riskleri azaltır.

Nerelerde kullanılır?

  • Giriş ve parola sıfırlama: Parola tahmin saldırılarını yavaşlatmak için.
  • SMS ve e-posta doğrulama kodları: Maliyetli ve kötüye kullanılabilir işlemler. Bkz. SMS entegrasyonu.
  • İletişim formları: Spam ve toplu gönderimleri engellemek. Bkz. form spam önleme.
  • Herkese açık API'ler: Adil kullanım ve sunucu koruması.
  • Pahalı işlemler: Rapor oluşturma, dışa aktarma, yapay zekâ çağrıları.

Algoritmalar

Sabit pencere

Her dakika için en fazla 60 istek gibi. Basittir; ancak pencere sınırlarında kısa süreli yoğunluklara izin verebilir.

Kayan pencere

Pencereyi daha küçük parçalara bölerek sınırları yumuşatır.

Token bucket (jeton kovası)

Kova belirli hızla dolar; her istek bir jeton harcar. Kısa süreli patlamalara izin verirken ortalama hızı sınırlar.

Eşzamanlılık sınırı

Aynı anda işlenen istek sayısını sınırlar; ağır işlemler için uygundur.

ASP.NET Core'da

.NET 7 ve sonrasında ASP.NET Core yerleşik bir rate limiting ara katmanı sunar:

builder.Services.AddRateLimiter(o =>
{
    o.AddFixedWindowLimiter("giris", opt =>
    {
        opt.PermitLimit = 5;
        opt.Window = TimeSpan.FromMinutes(1);
    });
    o.RejectionStatusCode = StatusCodes.Status429TooManyRequests;
});

app.UseRateLimiter();
app.MapPost("/giris", GirisYap).RequireRateLimiting("giris");

Neye göre sınırlanmalı?

  • IP adresi: anonim istekler için. Ancak aynı ağdaki birçok kullanıcı tek IP'den görünebilir.
  • Kullanıcı veya API anahtarı: kimliği doğrulanmış istekler için daha adildir.
  • Hesap bazlı: giriş denemelerinde, saldırgan IP değiştirse bile hesap korunur.

Kullanıcıya doğru yanıt

Sınır aşıldığında 429 Too Many Requests döndürülmeli ve mümkünse ne kadar beklenmesi gerektiği bildirilmelidir. Mobil ve web istemcileri bu yanıtı anlayıp kullanıcıya düzgün bir mesaj göstermelidir.

Dağıtık ortamlarda

Birden fazla sunucu varsa sınırlar her sunucuda ayrı tutulursa beklenenden fazla isteğe izin verilir. Bu durumda ortak bir depo (örneğin Redis) kullanılabilir. Bkz. Redis ile önbellek.

Sık sorulan sorular

Rate limiting DDoS saldırılarını durdurur mu?

Uygulama düzeyinde yardımcı olur; ancak büyük ölçekli saldırılara karşı ağ ve CDN düzeyinde koruma gerekir.

Limitleri nasıl belirlemeliyim?

Gerçek kullanım verilerine bakın; normal kullanıcıyı hiç etkilemeyecek ama kötüye kullanımı durduracak bir eşik seçin ve izleyerek ayarlayın.

Sonuç

Rate limiting, birkaç satırla büyük riskleri azaltan temel bir güvenlik ve dayanıklılık önlemidir. API güvenliğiniz için destek alabilirsiniz.