Hoşgeldin Misafir

Yasar7880

İzmir
1 Mar 2024
848 Mesaj
TIM Görevleri
1

Aktiflik

Seviye

Deneyim

TIM / GÖREV:

Sevgili Turkhacks okurları,


Bir REST API geliştirirken çoğu geliştirici önce veritabanını, güvenlik katmanını ve kullanıcı yönetimini düşünür. Ancak sistem gerçek kullanıcılarla buluşmaya başladığında gözden kaçan başka bir konu ortaya çıkar: aşırı istek yükü.

Bir uygulama bazen binlerce gerçek kullanıcı tarafından yoğun şekilde kullanılabilir. Bazen de kötü niyetli kişiler belirli endpoint'lere saniyede yüzlerce hatta binlerce istek gönderebilir. Sonuç genellikle aynıdır; sistem yavaşlar, kaynak tüketimi artar ve bazı durumlarda servis tamamen erişilemez hale gelir.

İşte tam bu noktada rate limiting devreye girer.
Rate limiting, belirli bir kullanıcıya veya IP adresine belirli süre içerisinde gönderilebilecek maksimum istek sayısını tanımlayan bir koruma mekanizmasıdır.
Basit görünmesine rağmen modern uygulamaların güvenlik katmanında oldukça önemli bir yere sahiptir.


0*eveZ3L8GOeJJskCT.png

Rate Limiting Nedir?

En basit tanımıyla rate limiting, kullanıcıların belirli bir zaman aralığında yapabileceği istek sayısını sınırlandırır.

Örneğin:

İşlem
Limit
LoginDakikada 5 istek
Şifre sıfırlamaDakikada 3 istek
API sorgusuDakikada 100 istek
Kayıt oluşturma
Dakikada 20 istek
Belirlenen limit aşılırsa sistem yeni isteği kabul etmez.

Bu sayede hem kaynak tüketimi kontrol altında tutulur hem de birçok saldırı türü engellenebilir.


Rate Limiting Neden Gereklidir?

Yeni başlayan geliştiriciler bazen JWT kullandıkları için sistemlerinin tamamen güvenli olduğunu düşünebiliyor.

Ancak JWT kullanıcıyı doğrular.
Rate limiting ise sistemi korur.
Aradaki fark oldukça önemlidir.

Örneğin bir saldırgan giriş ekranına saniyede yüzlerce deneme gönderebilir.
JWT burada bir çözüm sunmaz.
Rate limiting ise belirli bir noktadan sonra isteği reddeder.


Hangi Saldırılara Karşı Koruma Sağlar?

Sevgili Turkhacks okurları, burada önemli olan nokta rate limiting'in tek başına bir güvenlik sistemi olmadığıdır. Ancak doğru kullanıldığında saldırı yüzeyini ciddi şekilde küçültür.

Koruma sağladığı başlıca senaryolar:

✅ Brute force saldırıları
✅ Credential stuffing saldırıları
✅ API spam girişimleri
✅ Kaynak tüketme saldırıları
✅ Otomatik bot istekleri

Tam koruma sağlamasa da saldırganın işini oldukça zorlaştırır.


Spring Boot'ta Rate Limiting Nasıl Çalışır?

Mantık aslında oldukça basittir.
Her kullanıcı veya IP adresi için bir sayaç tutulur.

Örneğin:

192.168.1.15


1 Dakika İçerisinde

100 İstek

  1. istekte sistem yanıt döndürür:
HTTP 429
Too Many Requests

Bu hata kodu istemciye limitin aşıldığını bildirir.


En Yaygın Rate Limiting Yaklaşımları


Farklı projelerde farklı yöntemler kullanılabilir.

YöntemAçıklama
Fixed WindowSabit zaman aralığı
Sliding WindowKayan zaman aralığı
Token BucketEn yaygın yöntem
Leaky Bucket
Trafik dengeleme
Günümüzde en çok tercih edilen yöntemlerden biri Token Bucket algoritmasıdır.


Token Bucket Neden Bu Kadar Popüler?

Bu yaklaşımın mantığı oldukça anlaşılırdır.
Sistemde belirli sayıda token bulunur.
Her gelen istek bir token tüketir.
Token kalmadığında yeni istekler reddedilir.

Örneğin:

DurumSonuç
10 token mevcutİstek kabul edilir
5 token kaldıİstek kabul edilir
0 token kaldı
İstek reddedilir

Bu yöntem hem performanslı hem de esnek çalışır.


Spring Boot Projelerinde Hangi Kütüphaneler Kullanılır?

Rate limiting geliştirmek için sıfırdan sistem yazılabilir.

Ancak çoğu projede hazır çözümler tercih edilir.

KütüphaneKullanım Alanı
Bucket4jEn popüler seçenek
Resilience4jMikroservis projeleri
RedisDağıtık sistemler
Spring Cloud Gateway
Gateway seviyesinde koruma

Özellikle Bucket4j son yıllarda Spring Boot geliştiricileri arasında oldukça yaygın hale gelmiştir.


Rate Limiting Nerede Uygulanmalı?

Bu soru gerçek projelerde sıkça sorulur.

Her endpoint'e aynı limit uygulanmaz.

Örneğin:

EndpointÖnerilen Limit
LoginDakikada 5
RegisterDakikada 10
Profil GörüntülemeDakikada 100
Genel API
Dakikada 200
Kritik işlemlerde limit daha düşük tutulmalıdır.


Mikroservis Mimarilerinde Rate Limiting

Mikroservis kullanan sistemlerde rate limiting genellikle servislerin içinde değil, API Gateway katmanında uygulanır.
Yani süreç şu şekilde işler:

Kullanıcı

API Gateway

Rate Limit Kontrolü

İlgili Mikroservis


Bu yaklaşım tüm sistem için merkezi bir koruma sağlar.


Yapılan Yaygın Hatalar

Rate limiting kullanırken bazı hatalar sıkça karşımıza çıkar.

Limitleri Çok Düşük Belirlemek

Gerçek kullanıcılar da engellenmeye başlayabilir.


Tüm Endpoint'lere Aynı Kuralı Uygulamak

Login ile ürün listeleme isteğinin aynı değerlendirilmesi doğru değildir.


Sadece IP Adresine Güvenmek

Bazı kullanıcılar aynı ağ üzerinden çıkış yapabilir.
Kurumsal yapılarda bu durum sorun oluşturabilir.


Dağıtık Sistemlerde Bellek Tabanlı Sayaç Kullanmak

Birden fazla sunucu varsa sayaçların merkezi yönetilmesi gerekir.
Bu noktada Redis gibi çözümler tercih edilmelidir.


Rate Limiting ve JWT Birlikte Kullanılmalı mı?

Kesinlikle evet.
Aslında en güçlü koruma katmanlarından biri bu ikilinin birlikte kullanılmasıdır.

SistemGörevi
JWTKimlik doğrulama
Rate Limiting
İstek kontrolü
JWT kullanıcının kim olduğunu söyler.

Rate limiting ise o kullanıcının ne kadar istek gönderebileceğini kontrol eder.
Birbirlerini tamamlayan iki farklı güvenlik katmanıdır.


Spring Boot projelerinde rate limiting uygulamak yalnızca performans optimizasyonu değildir. Aynı zamanda sistem güvenliğinin önemli bir parçasıdır.
Doğru yapılandırılmış bir rate limiting mekanizması; brute force saldırılarını zorlaştırır, gereksiz kaynak tüketimini azaltır ve API servislerinin daha stabil çalışmasına yardımcı olur. Özellikle JWT tabanlı modern REST API projelerinde, rate limiting artık ek bir özellik değil, temel güvenlik bileşenlerinden biri olarak değerlendirilmelidir.

Sevgili Turkhacks okurları, güçlü bir API yalnızca hızlı çalışan API değildir. Aynı zamanda kötü niyetli kullanımlara karşı kendisini koruyabilen API'dir. Güvenlik çoğu zaman büyük sistemlerle değil, doğru zamanda alınmış küçük önlemlerle başlar.

Bir dahaki makalemizde görüşene kadar mavi ekransız ve sorunsuz sistemlerle çalışmanız dileği ile Hoşçakalın


9jul8m7.jpeg