Bir API yayınladığın an, aslında kapını internete açmış oluyorsun. “Sadece bizim mobil uygulama kullanıyor” demek kulağa rahatlatıcı geliyor ama pratikte pek öyle olmuyor. API endpoint’iniz bir kez keşfedildi mi, iyi niyetli trafik kadar kötü niyetli trafik de gelebilir. Üstelik bu trafik her zaman “hack” gibi görünmez. Bazen sadece binlerce istek, bazen deneme-yanılma, bazen de çalınmış token’larla sessiz bir dolaşma.
On yıldır farklı ölçeklerde ürünlerde API tasarlayıp canlıya alan biri olarak şunu net söyleyebilirim. API güvenliğinde iki konu, neredeyse her zaman omurga olur. Birincisi rate limiting. İkincisi token yönetimi. Bu yazıda API Güvenliği: Rate Limiting ve Token Yönetimi konusunu pratik bir rehber gibi ele alacağız.
REST API’leri kötü niyetli kullanımdan koruma: rate limiting, JWT ve API key stratejileri rehberi arayanlar için baştan sona bir çerçeve kuracağız. Rate limiting nedir? API güvenliğinde kullanım senaryoları neler? JWT ile authentication ve authorization nasıl uygulanır? API anahtarları (API key) ile güvenlik ve erişim kontrol stratejileri nasıl tasarlanır? Gerçek projelerde REST API güvenliği best practices ve yaygın hatalar neler? Yazının sonunda da API güvenliği ve JWT eğitimi yakınımda diye arayanlar için doğru bir yönlendirme bırakacağım.
Rate limiting tarafına hızlı bir giriş istersen şu içerik de iyi bir tamamlayıcı: API’lerde rate limit nedir ve nasıl yönetilir?
API Güvenliği Nedir ve Neden Kritiktir?
API’lerin Modern Yazılımdaki Rolü
Bugün neredeyse her ürün bir API ürünüdür. Mobil uygulamalar, web uygulamaları, üçüncü parti entegrasyonlar, mikroservisler. Hepsi API ile konuşur. Yani API’nin güvenliği, ürünün güvenliğidir.
API Güvenliği: Rate Limiting ve Token Yönetimi konusu da tam burada önem kazanıyor. Çünkü API’ler genelde internetin en görünür yüzü.
API Güvenliği Olmadan Karşılaşılan Riskler
Yetkisiz Erişim
Zayıf kimlik doğrulama veya yanlış yetkilendirme ile saldırgan, erişmemesi gereken verilere erişebilir. En sık gördüğüm problem, “auth var sanıyorduk ama bazı endpoint’ler açık kalmış” durumu.
Veri Sızıntıları
Token ele geçirilirse veya endpoint’ler aşırı geniş veri döndürürse sızıntı olur. Sızıntı bazen tek seferlik değil, “sessiz” şekilde aylarca sürebilir.
Servis Dışı Bırakma (DoS / DDoS)
API’ye yoğun istek atılır ve sistem kaynakları tükenir. Rate limiting burada hem güvenlik hem de dayanıklılık aracıdır.
API’lere Yönelik Yaygın Saldırı Türleri
Brute Force ve Credential Stuffing
Login endpoint’leri, OTP doğrulama endpoint’leri, parola sıfırlama akışları bu saldırıların hedefi olur. Denemeyi otomatikleştirirler. Eğer limit yoksa sistem yorulur, kullanıcılar da etkilenir.
Rate Abuse ve Flooding
API kötü niyetle değil, “aşırı kullanım” ile de çökebilir. Bazı botlar saniyede yüzlerce istek atar. Bazı entegrasyonlar hatalı döngüye girer. Flooding her zaman saldırı değildir ama sonuç aynı olabilir.
Token Ele Geçirme ve Replay Attack
Token çalınırsa saldırgan o token ile senin gibi davranabilir. Replay attack senaryosunda bir isteğin tekrar tekrar kullanılması hedeflenir. Burada token ömrü, revocation ve ek kontroller önemlidir.
Zayıf Kimlik Doğrulama Senaryoları
API key’i query param’da taşımak, JWT’yi localStorage’da saklayıp XSS riskini büyütmek, refresh token’ı yanlış yönetmek. Bunlar pratikte sık görülen hatalardır.
Rate Limiting Nedir?
Rate Limiting’in Temel Mantığı
Rate limiting, belirli bir zaman aralığında belirli sayıda isteğe izin verme yaklaşımıdır. Amaç saldırıları yavaşlatmak, sistemi korumak ve adil kullanım sağlamaktır.
Rate limiting nedir? API güvenliğinde kullanım senaryoları denince ilk akla gelen budur. Saldırganın hızını kesmek.
Rate Limiting Neden API Güvenliğinin Temelidir?
Çünkü kimlik doğrulama bile bazen yeterli değildir. Yetkili bir kullanıcı da sistemi kötüye kullanabilir. Çalınmış token da yetkili görünür. Rate limiting, “yetki” ile “kullanım” arasına bir güvenlik bandı koyar.
Ben rate limiting’i sadece güvenlik değil, ürün kalitesi olarak da görüyorum. Bir kullanıcı sistemi kilitlerse diğer kullanıcılar zarar görmemeli.
Rate Limiting Türleri
IP Bazlı Rate Limiting
En klasik yaklaşım. Aynı IP’den gelen istekleri sınırlar. Bot trafik için faydalıdır ama NAT arkasındaki gerçek kullanıcıları da etkileyebilir.
Kullanıcı Bazlı Rate Limiting
Authenticated kullanıcı id’sine göre limit koyarsın. Kullanıcı başına adil kullanım sağlar. Login öncesi trafik için tek başına yeterli olmayabilir.
Token Bazlı Rate Limiting
Token’a veya API key’e göre limit koyarsın. Public API’lerde çok işe yarar. Çünkü “müşteri bazlı kota” yönetimi kolaylaşır.
Rate Limiting Algoritmaları (Derinlemesine)
Fixed Window Algoritması
Belirli bir zaman penceresi içinde sayım yapar. Örneğin “1 dakikada 60 istek”. Basittir ama pencere sınırlarında burst etkisi yaratabilir.
Sliding Window Algoritması
Pencereyi kaydırarak daha adil bir dağılım sağlar. Burst etkisini azaltır. Uygulaması fixed’e göre daha maliyetli olabilir.
Token Bucket Algoritması
Bir kovada token birikir, her istek bir token tüketir. Token’lar zamanla dolduğu için kısa süreli burst’e izin verir ama kontrolü kaybetmez. Ben pratikte en sevdiğim yaklaşımlardan biri.
Leaky Bucket Algoritması
İstekleri sabit hızda “akıtan” bir yapı gibi düşünebilirsin. Kuyruk mantığına benzer. Sürekli ve stabil trafik için iyidir.
Algoritmaların Avantaj ve Dezavantaj Karşılaştırması
Fixed window basit ve hızlıdır ama burst sorunu olur. Sliding daha adildir ama hesaplama maliyeti artabilir. Token bucket dengelidir, gerçek hayatta sık tercih edilir. Leaky bucket ise akış kontrolünde güçlüdür ama bazı senaryolarda kullanıcı deneyimini zorlayabilir.
Seçim yaparken şu soruyu sor. “Ben burst’ü ne kadar tolere ediyorum?”
Token Yönetimi Nedir?
Token Tabanlı Kimlik Doğrulama Mantığı
Token tabanlı yaklaşımda kullanıcı giriş yapar, sistem bir token üretir. İstemci sonraki isteklerde bu token’ı gönderir. Server token’ı doğrular ve yetkilendirir.
JWT ile authentication ve authorization nasıl uygulanır sorusu da burada devreye girer. JWT, token’ın içinde bazı bilgileri taşıyabilir ama güvenli tasarlanmazsa risk olur.
API Anahtarı vs Token Kullanımı
API key genelde “uygulamayı” veya “entegrasyonu” tanımlar. Token ise çoğu zaman “kullanıcı oturumu”nu temsil eder. API key tek başına auth yerine geçmemeli, özellikle kullanıcı verisine erişiliyorsa.
API anahtarları (API key) ile güvenlik ve erişim kontrol stratejileri kurarken, key’in kimde olduğunu ve nasıl döndürüleceğini planlaman gerekir.
Token Türleri
JWT (JSON Web Token)
JWT, imzalı bir token formatıdır. Doğru tasarlanırsa stateless doğrulama sağlar. Ama token sızarsa, ömrü bitene kadar risk oluşturabilir. Bu yüzden expiration ve rotation önemlidir.
OAuth 2.0 Access Token
OAuth 2.0 access token, yetkilendirme çerçevesi içinde kullanılan bir token türüdür. Genelde üçüncü parti entegrasyonlarda ve farklı client türlerinde standart çözüm olur.
Refresh Token
Access token kısa ömürlü olur, refresh token ile yenilenir. Bu yaklaşım, sızıntı riskini azaltır ama refresh token güvenliği çok kritiktir.
Güvenli Token Yönetimi Best Practices
Token Expiration Süreleri Nasıl Belirlenmeli?
Ben pratikte access token’ı kısa tutmayı severim. Çok uzun ömür, çalınırsa büyük risk demektir. Çok kısa ömür ise kullanıcı deneyimini bozabilir.
Denge şu. Kullanım senaryona göre ölç, izle, ayarla. Kritik işlemlerde daha kısa, düşük riskli işlemlerde daha toleranslı olabilir.
Refresh Token Stratejileri
Refresh token’ı uzun ömürlü tutacaksan mutlaka ek önlemler gerekir. Cihaz bağlama, anomali kontrolü, tek cihazda tek refresh token gibi stratejiler işe yarar.
Online sistemlerde “oturum açtım, beni hatırla” seçeneği genelde refresh token ile yönetilir. Bu alanı hafife alma.
Token Rotation ve Revocation
Rotation, token yenilendiğinde eskisini geçersiz kılmaktır. Revocation ise token’ı aktif olarak iptal edebilmektir.
JWT stateless olduğu için revocation bazen ek liste yönetimi ister. Ben kritik sistemlerde bu konuyu baştan tasarlamayı şart görüyorum.
Token’ların Güvenli Saklanması
Client-Side Riskler
Tarayıcı tarafında XSS riski varsa token saklama kararı çok önemlidir. Mobilde cihaz güvenliği, jailbreak/root senaryoları ve debug log’ları gibi riskler vardır.
Ben web tarafında çerez stratejisini, mobile tarafında ise güvenli storage yaklaşımını tercih ederim. Ama burada tek doğru yok, tehdit modeline göre karar vermek gerekir.
Server-Side Güvenlik Önlemleri
İmzalama anahtarlarını güvenli tutmak, düzenli döndürmek, token doğrulama hatalarını doğru log’lamak, şüpheli kullanımda token’ı iptal etmek gibi önlemler server tarafında önemlidir.
Rate Limiting ve Token Yönetiminin Birlikte Kullanımı
Kimlik Doğrulama Sonrası Rate Limiting
Login öncesi IP bazlı limit, login sonrası kullanıcı veya token bazlı limit iyi bir kombinasyondur. Böylece hem anonim saldırıları hem de yetkili abuse senaryolarını yönetirsin.
Yetkili Kullanıcılar için Dinamik Limitler
Örneğin ücretli planlarda daha yüksek limit, ücretsiz planlarda daha düşük limit. Ya da admin paneli gibi kritik endpoint’lerde daha sıkı limit.
Bu yaklaşım hem iş modeli hem güvenlik açısından işe yarar.
Abuse Detection Senaryoları
Rate limiting sadece “blokla” değil, “anla” da demeli. Hangi kullanıcılar sürekli limite takılıyor? Hangi IP’ler anormal? Hangi token’lar geceleri yoğunlaşıyor?
Benim sahada öğrendiğim şey şu. Abuse detection iyi olursa, güvenlik olayı büyümeden yakalanır.
Mikroservis Mimarilerinde API Güvenliği
API Gateway Üzerinden Rate Limiting
Gateway, rate limiting için merkezi bir yerdir. Servislere tek tek dağıtmak yerine sınırları gateway’de yönetmek daha tutarlı olabilir.
Ancak bazı özel servislerde ek servis-içi limit de gerekebilir. Özellikle iç endpoint’lerde.
Merkezi Token Doğrulama Yaklaşımı
Token doğrulamayı merkezi bir kimlik servisi üzerinden yapmak, standardı korur. Servislerin “kendi kafasına göre” doğrulama yapması risk üretir.
Service-to-Service Authentication
Mikroservisler birbirine token ile konuşur. Burada machine identity, kısa ömürlü token’lar ve güvenli key yönetimi önemlidir.
API Güvenliği: Rate Limiting ve Token Yönetimi konusu mikroservislerde daha da kritiktir çünkü yüzey alanı büyür.
Gerçek Dünya Senaryoları ve Örnek Mimariler
Public API’lerde Rate Limiting Stratejisi
Public API’de kota şarttır. IP bazlı limit, API key bazlı kota, endpoint bazlı limit, burst kontrolü. Ayrıca limite takılan istemciye net hata mesajı ve retry-after bilgisi vermek kullanıcı deneyimini iyileştirir.
SaaS Platformları için Token Yönetimi
SaaS tarafında kullanıcı oturumları, ekip hesapları, cihazlar, entegrasyon token’ları ayrı ayrı yönetilir. Access token kısa, refresh token kontrollü olmalı. Oturum kapatma, cihazdan çıkış, şifre değişiminde token iptali gibi akışlar net olmalı.
Open Source Projelerde API Güvenliği Yaklaşımları
Open source projeler genelde örnek mimariler sunar. Ancak her örnek doğrudan production’a uygun olmayabilir. Özellikle token saklama, secret yönetimi ve rate limiting limit değerleri projeye göre değişir.
Open Source Araçlar ve Teknolojiler
NGINX ile Rate Limiting
NGINX, reverse proxy katmanında rate limiting için sık kullanılır. IP bazlı limitler ve burst kontrolü burada oldukça pratiktir.
Kong / Traefik API Gateway Örnekleri
Gateway çözümleri, rate limiting ve auth entegrasyonlarını merkezi hale getirebilir. Özellikle mikroservis ortamında yönetim kolaylığı sağlar.
Open Source Kimlik Doğrulama Çözümleri
Kimlik doğrulama için açık kaynak çözümler, OAuth akışları ve token yönetimi konusunda hız kazandırabilir. Yine de entegrasyon yaparken tehdit modelini netleştirmek gerekir.
Sık Yapılan Hatalar ve Kaçınılması Gereken Yanlışlar
Sınırsız API Endpoint’leri
“Zaten küçük proje” deyip rate limiting koymamak çok yaygın. Sonra bot gelir, servis yavaşlar, maliyet artar, kullanıcı şikayet eder.
Benim kuralım şu. Public endpoint varsa limit de olmalı. En azından temel seviye.
Uzun Ömürlü Token Kullanımı
Token ömrü uzadıkça çalınma riski büyür. “Nasıl olsa HTTPS var” demek yetmez. Token sızarsa etkisi büyük olur.
Rate Limiting Olmadan Public API Yayınlamak
Public API yayınlayıp limit koymamak, kapıyı açık bırakmak gibidir. Kötü niyetli kullanımı davet etmesen bile, hatalı entegrasyonlar bile seni zorlar.
Sonuç: Güvenli ve Ölçeklenebilir API’ler İçin Yol Haritası
Güvenlik Kontrol Listesi
Parametreli kimlik doğrulama akışı, kısa ömürlü access token, güvenli refresh token stratejisi, token rotation ve iptal mekanizması, endpoint bazlı rate limiting, login akışlarında sıkı limit ve anomali tespiti.
Bu listeyi bir başlangıç gibi düşün. Her projede tehdit modeli farklıdır.
Sürekli İzleme ve Loglama
Rate limiting metriklerini izle. Hangi endpoint’ler limite takılıyor? Hangi kullanıcılar anormal? Token doğrulama hataları artıyor mu? Bu sinyaller erken uyarıdır.
Ben üretimde şunu seviyorum. Limitlere takılan olaylar ayrı bir dashboard’da izlenmeli. Çünkü çoğu zaman saldırı ilk orada görünür.
Gelecek Trendler (Zero Trust, AI Destekli Güvenlik)
Zero trust yaklaşımı API güvenliğinde daha merkezi hale geliyor. Her istek doğrulanmalı, her erişim yetkilendirilmeli. AI destekli güvenlik ise anomali tespiti ve davranış analizi tarafında yardımcı olabilir.
Yine de temel değişmiyor. Rate limiting ve token yönetimi hâlâ temel. Bu yüzden API Güvenliği: Rate Limiting ve Token Yönetimi konusunu sağlam kurmak, geleceğe yatırım gibi.
Sonuç ve Davet
Bu yazıda API güvenliğini iki ana başlıkla ele aldık. Rate limiting ile kötüye kullanımı yavaşlattık, token yönetimi ile kimliği ve yetkiyi sağlamlaştırdık. Gerçek projelerde REST API güvenliği best practices dediğimiz şey, aslında bu iki konuyu doğru kombinlemeyi bilmek. Limitleri doğru seçmek, token’ı doğru saklamak, ömrü doğru ayarlamak, iptal ve yenileme akışını baştan tasarlamak.
Bu konuyu uygulamalı öğrenmek, kendi API’lerinde doğru mimariyi kurmak ve canlı sistemlerde güvenlik pratiklerini oturtmak istersen Diyarbakır Yazılım Topluluğu sayfasından eğitim ve danışmanlık seçeneklerine göz atabilirsin. Topluluğu daha yakından tanımak için hakkımızda sayfası da iyi bir başlangıç olur.
Sık Sorulan Sorular
API güvenliği nedir ve neden önemlidir?
API güvenliği, API endpoint’lerini yetkisiz erişim, veri sızıntısı, servis dışı bırakma ve kötüye kullanım senaryolarına karşı koruma yaklaşımıdır. Modern uygulamaların büyük kısmı API ile çalıştığı için API güvenliği ürün güvenliğinin merkezindedir.
Rate limiting nedir ve API saldırılarına karşı nasıl korur?
Rate limiting, belirli süre içinde belirli sayıda isteğe izin vererek saldırıların hızını keser, brute force ve flooding gibi kötüye kullanımları sınırlar ve sistem kaynaklarını korur.
API token yönetimi nasıl yapılır ve güvenliği nasıl sağlanır?
Kısa ömürlü access token, kontrollü refresh token, token rotation ve iptal (revocation) mekanizması, güvenli saklama, anahtar yönetimi, logging ve anomali tespiti ile güvenli token yönetimi sağlanır.
OAuth ve JWT gibi token mekanizmaları API güvenliğinde nasıl kullanılır?
JWT, imzalı token yapısıyla stateless doğrulama sağlar ve uygun expiration ile kullanılmalıdır. OAuth 2.0, yetkilendirme akışlarını standardize eder ve access token/refresh token modeliyle farklı client türlerine güvenli erişim sunar.
API güvenliği eğitimi veya kursu yakınımda nerede bulunur?
Uygulamalı eğitim ve topluluk desteği arıyorsan Diyarbakır Yazılım Topluluğu üzerinden API güvenliği eğitim seçeneklerini inceleyebilirsin.