API Güvenliği Neden Bu Kadar Önemli?
Modern yazılım dünyasında API'ler (Application Programming Interface), uygulamalar arasındaki iletişimin temel taşlarıdır. Mobil uygulamalardan IoT cihazlarına, mikroservis mimarilerinden üçüncü parti entegrasyonlara kadar her yerde API'ler kullanılmaktadır. Ancak bu yaygın kullanım, API'leri siber saldırganlar için son derece cazip hedefler haline getirmektedir.
Gartner'ın araştırmalarına göre, 2025 yılı itibarıyla web uygulamalarına yönelik saldırıların büyük çoğunluğu API'ler üzerinden gerçekleşmektedir. API güvenliği artık "olsa iyi olur" değil, "olmazsa olmaz" bir gerekliliktir. Bir API güvenlik ihlali, müşteri verilerinin sızmasından finansal kayıplara, itibar zedelenmesinden yasal yaptırımlara kadar ciddi sonuçlar doğurabilir.
"Bir zincir, en zayıf halkası kadar güçlüdür. Modern yazılım sistemlerinde bu en zayıf halka genellikle güvenliği ihmal edilmiş API'lerdir."
OWASP API Security Top 10
OWASP (Open Web Application Security Project), API güvenliği konusunda en yetkili kaynaklardan biridir. OWASP API Security Top 10 listesi, en kritik API güvenlik risklerini sınıflandırır ve her geliştirici tarafından bilinmelidir.
1. Broken Object Level Authorization (BOLA)
BOLA, bir API'nin nesne düzeyinde yetkilendirme kontrollerini düzgün yapmadığı durumlarda ortaya çıkar. Saldırgan, başka kullanıcılara ait verilere erişmek için nesne tanımlayıcılarını (ID) manipüle edebilir.
// Güvensiz API çağrısı
GET /api/users/123/orders
// Saldırgan farklı bir kullanıcının siparişlerine erişebilir
GET /api/users/456/orders
Bu tür saldırılardan korunmak için her API çağrısında nesne düzeyinde yetkilendirme kontrolü yapılmalı ve kullanıcının yalnızca kendi verilerine erişebildiğinden emin olunmalıdır.
2. Broken Authentication
Kimlik doğrulama mekanizmalarındaki zafiyetler, saldırganların meşru kullanıcılar gibi davranmasına olanak tanır. Zayıf şifre politikaları, token yönetimi hataları ve brute-force saldırılarına karşı yetersiz koruma bu kategoriye girer.
3. Broken Object Property Level Authorization
API'ler genellikle gereğinden fazla veri döndürür. Kullanıcının görmemesi gereken nesne özellikleri yanıtta yer alabilir veya kullanıcı değiştirmemesi gereken alanları güncelleyebilir.
4. Unrestricted Resource Consumption
API çağrılarının kaynak tüketimi sınırlandırılmadığında, saldırganlar aşırı isteklerle sistemi çökertebilir veya maliyetli operasyonları tekrar tekrar çağırarak finansal zarar verebilir.
5. Broken Function Level Authorization
Farklı yetki seviyelerindeki kullanıcıların erişebileceği API fonksiyonlarının düzgün ayrılmaması, normal kullanıcıların yönetici fonksiyonlarına erişmesine neden olabilir.
6. Unrestricted Access to Sensitive Business Flows
İş akışlarına sınırsız erişim, otomatik araçlarla kötüye kullanılabilir. Örneğin, toplu bilet satın alma botları veya otomatik hesap oluşturma araçları bu kategoriye girer.
7. Server-Side Request Forgery (SSRF)
API'nin kullanıcı tarafından sağlanan URL'leri doğrulamadan sunucu tarafında istek göndermesi, iç ağa erişim sağlanmasına yol açabilir.
8. Security Misconfiguration
Yanlış yapılandırılmış güvenlik başlıkları, gereksiz HTTP metotlarının açık bırakılması, varsayılan ayarların değiştirilmemesi gibi konfigürasyon hataları ciddi güvenlik açıkları oluşturur.
9. Improper Inventory Management
Eski, kullanılmayan veya belgelenmemiş API endpoint'lerinin aktif kalması, saldırganlara keşfedilmemiş giriş noktaları sağlar.
10. Unsafe Consumption of APIs
Üçüncü parti API'lerin yanıtlarına körü körüne güvenmek, güvenlik zafiyetlerine neden olabilir. Dış kaynaklardan gelen veriler de doğrulanmalıdır.
Kimlik Doğrulama Mekanizmaları
API güvenliğinin ilk ve en kritik katmanı kimlik doğrulamadır. Modern API'lerde kullanılan başlıca kimlik doğrulama yöntemlerini inceleyelim.
API Anahtarları (API Keys)
API anahtarları, en basit kimlik doğrulama yöntemidir. Her istemciye benzersiz bir anahtar atanır ve bu anahtar her istekle birlikte gönderilir.
// API anahtarı ile istek gönderme
GET /api/data HTTP/1.1
Host: api.example.com
X-API-Key: sk_live_abc123def456ghi789
API anahtarlarının avantajları basitlik ve kolay entegrasyondur. Ancak tek başına yeterli güvenlik sağlamazlar çünkü anahtarlar kolayca sızdırılabilir, kullanıcı bazlı yetkilendirme yapılamazlar ve genellikle uzun ömürlü oldukları için ele geçirilme riski yüksektir.
OAuth 2.0
OAuth 2.0, modern API güvenliğinin standart protokolüdür. Yetkilendirme çerçevesi olarak tasarlanmış olan OAuth 2.0, kullanıcıların üçüncü parti uygulamalara sınırlı erişim vermesini sağlar.
OAuth 2.0'ın temel akışları şunlardır:
- Authorization Code Flow: Web uygulamaları için en güvenli akış. Sunucu tarafında çalışır ve gizli anahtarlar korunur.
- Client Credentials Flow: Makineden makineye iletişim için kullanılır. Kullanıcı etkileşimi gerektirmez.
- PKCE (Proof Key for Code Exchange): Mobil ve tek sayfa uygulamaları için tasarlanmış, Authorization Code Flow'un güvenli versiyonudur.
- Device Authorization Flow: Sınırlı giriş imkanına sahip cihazlar (akıllı TV, IoT) için kullanılır.
// OAuth 2.0 Authorization Code Flow örneği
// 1. Yetkilendirme isteği
GET /authorize?
response_type=code&
client_id=CLIENT_ID&
redirect_uri=https://app.example.com/callback&
scope=read:users&
state=random_state_value
// 2. Token değişimi
POST /token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=AUTHORIZATION_CODE&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET&
redirect_uri=https://app.example.com/callback
JSON Web Token (JWT)
JWT, kimlik doğrulama ve bilgi paylaşımı için yaygın olarak kullanılan bir token standardıdır. Üç bölümden oluşur: Header, Payload ve Signature.
// JWT yapısı
{
"header": {
"alg": "RS256",
"typ": "JWT"
},
"payload": {
"sub": "user123",
"name": "Ahmet Yılmaz",
"role": "admin",
"iat": 1710000000,
"exp": 1710003600
},
"signature": "..."
}
JWT güvenliği için dikkat edilmesi gereken noktalar şunlardır:
- Asla "alg: none" kabul etmeyin
- Güçlü imzalama algoritmaları kullanın (RS256 veya ES256)
- Token süresini kısa tutun (genellikle 15-60 dakika)
- Refresh token mekanizması kullanın
- Token'ları güvenli şekilde saklayın (HttpOnly cookie tercih edin)
- Token iptal mekanizması (blacklist) oluşturun
Yetkilendirme (Authorization) Stratejileri
Kimlik doğrulama "kim olduğunuzu" belirlerken, yetkilendirme "ne yapabileceğinizi" kontrol eder. API'lerde etkili yetkilendirme için çeşitli yaklaşımlar kullanılır.
Rol Tabanlı Erişim Kontrolü (RBAC)
RBAC, kullanıcılara roller atayarak erişim haklarını yönetir. Her rol belirli izinlere sahiptir ve kullanıcılar bir veya birden fazla role atanabilir.
| Rol | Okuma | Yazma | Güncelleme | Silme | Yönetim |
|---|---|---|---|---|---|
| Okuyucu | Evet | Hayır | Hayır | Hayır | Hayır |
| Editör | Evet | Evet | Evet | Hayır | Hayır |
| Yönetici | Evet | Evet | Evet | Evet | Evet |
Öznitelik Tabanlı Erişim Kontrolü (ABAC)
ABAC, daha esnek bir yaklaşımdır. Kullanıcı öznitelikleri, kaynak öznitelikleri, ortam koşulları ve istenen işlem gibi çoklu faktörlere dayalı kararlar alır. Örneğin, "departman yöneticisi, mesai saatleri içinde, kendi departmanının verilerine erişebilir" gibi kurallar tanımlanabilir.
Scope Tabanlı Yetkilendirme
OAuth 2.0 ile birlikte kullanılan scope'lar, API erişimini granüler şekilde kontrol etmeyi sağlar. Her token belirli scope'lara sahiptir ve yalnızca bu scope'ların izin verdiği işlemleri gerçekleştirebilir.
Rate Limiting ve Throttling
Rate limiting, API'nizin aşırı kullanımını ve kötüye kullanımını önlemek için kritik bir güvenlik mekanizmasıdır. Doğru uygulandığında hem DDoS saldırılarını hem de brute-force girişimlerini etkili şekilde engelleyebilir.
Rate Limiting Stratejileri
- Sabit Pencere (Fixed Window): Belirli bir zaman diliminde (örneğin dakikada 100 istek) izin verilen istek sayısını sınırlar.
- Kayan Pencere (Sliding Window): Sabit penceredeki sınır aşımı sorunlarını çözer, daha yumuşak bir geçiş sağlar.
- Token Bucket: Belirli aralıklarla yenilenen tokenlar kullanır. Ani yoğunluk artışlarına izin verirken uzun vadede ortalama hızı korur.
- Leaky Bucket: İstekleri sabit bir hızda işler, fazla istekleri kuyruğa alır veya reddeder.
// Rate limiting yanıt başlıkları
HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1710003600
Retry-After: 60
Rate limiting uygulanırken istemcilere mevcut kota durumu hakkında bilgi veren başlıklar eklemek, geliştirici deneyimini iyileştirir ve istemcilerin isteklerini akıllıca yönetmesini sağlar.
Input Validation ve Veri Doğrulama
API'lere gelen her veri potansiyel olarak tehlikeli kabul edilmelidir. Güvenli bir API, gelen tüm verileri titizlikle doğrular ve temizler.
Doğrulama Kuralları
- Tip Kontrolü: Beklenen veri tipinin doğrulanması (string, integer, boolean vb.)
- Uzunluk Sınırlaması: Girdilerin minimum ve maksimum uzunluk kontrolü
- Format Doğrulama: E-posta, telefon numarası, tarih gibi formatların regex ile kontrolü
- Whitelist Yaklaşımı: Yalnızca bilinen iyi değerlere izin verme
- Sanitization: HTML, SQL ve diğer enjeksiyon saldırılarına karşı veri temizleme
// ASP.NET Core'da model doğrulama örneği
public class CreateUserRequest
{
[Required]
[StringLength(100, MinimumLength = 2)]
public string Name { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[RegularExpression(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$")]
public string Password { get; set; }
}
JSON Schema Doğrulama
API isteklerini JSON Schema ile doğrulamak, yapısal bütünlüğü sağlamanın etkili bir yoludur. JSON Schema, beklenen veri yapısını tanımlayan ve gelen verilerin bu yapıya uygunluğunu kontrol eden bir standarttır.
Şifreleme ve TLS
API iletişiminde verilerin şifrelenmesi, bilgi gizliliğinin korunması için zorunludur. TLS (Transport Layer Security), istemci ile sunucu arasındaki trafiğin şifrelenmesini sağlar.
TLS Best Practices
- TLS 1.2 veya tercihen TLS 1.3 kullanın
- Eski protokolleri (SSL 3.0, TLS 1.0, TLS 1.1) devre dışı bırakın
- Güçlü cipher suite'ler seçin
- HSTS (HTTP Strict Transport Security) başlığını etkinleştirin
- Sertifika pinning uygulayın (mobil uygulamalar için)
- Let's Encrypt gibi otomatik sertifika yenileme çözümleri kullanın
Veri Şifreleme Katmanları
Uçtan uca güvenlik için yalnızca aktarım katmanında değil, depolama ve uygulama katmanlarında da şifreleme uygulanmalıdır:
- Aktarım Şifreleme: TLS ile ağ üzerindeki trafiğin korunması
- Depolama Şifreleme: Veritabanındaki hassas verilerin AES-256 ile şifrelenmesi
- Alan Düzeyinde Şifreleme: Kredi kartı numaraları, kişisel veriler gibi hassas alanların ayrıca şifrelenmesi
Loglama ve İzleme
Etkili loglama ve izleme, güvenlik olaylarının tespit edilmesi, soruşturulması ve önlenmesi için kritik öneme sahiptir. API güvenliği için kapsamlı bir izleme stratejisi oluşturmak, olası saldırıları erken aşamada tespit etmenizi sağlar.
Loglanması Gereken Olaylar
- Başarısız kimlik doğrulama girişimleri
- Yetkilendirme hataları (403 yanıtları)
- Rate limit aşımları
- Input validation hataları
- Olağandışı trafik desenleri
- Hassas verilere erişim girişimleri
- API yapılandırma değişiklikleri
İzleme ve Uyarı Sistemleri
Gerçek zamanlı izleme araçları kullanarak anomalileri tespit edin. Otomatik uyarı kuralları oluşturun: belirli bir sürede çok fazla başarısız giriş denemesi, beklenmeyen coğrafi konumlardan gelen istekler, normalden çok daha yüksek trafik hacimleri gibi durumlar için anlık bildirimler ayarlayın.
API Gateway Güvenliği
API Gateway, API'leriniz için tek bir giriş noktası oluşturarak güvenlik politikalarının merkezi olarak uygulanmasını sağlar. Modern API gateway çözümleri birçok güvenlik özelliğini yerleşik olarak sunar.
API Gateway'in Sağladığı Güvenlik Özellikleri
- Merkezi Kimlik Doğrulama: Tüm API isteklerinin gateway seviyesinde doğrulanması
- Rate Limiting: İstemci başına veya endpoint başına istek sınırlaması
- IP Filtreleme: Whitelist ve blacklist ile erişim kontrolü
- SSL Terminasyonu: TLS işlemlerinin gateway'de sonlandırılması
- İstek/Yanıt Dönüştürme: Hassas verilerin filtrelenmesi
- WAF Entegrasyonu: Web Application Firewall ile ek koruma katmanı
Popüler API gateway çözümleri arasında Kong, AWS API Gateway, Azure API Management, Apigee ve NGINX yer almaktadır. Seçim yaparken ölçeklenebilirlik, eklenti ekosistemi, izleme yetenekleri ve maliyet faktörlerini değerlendirin.
Güvenlik Başlıkları (Security Headers)
API yanıtlarında doğru güvenlik başlıklarının kullanılması, birçok yaygın saldırı vektörünü engellemek için gereklidir.
| Başlık | Amacı | Örnek Değer |
|---|---|---|
| Content-Security-Policy | XSS saldırılarını önler | default-src 'self' |
| X-Content-Type-Options | MIME type sniffing'i engeller | nosniff |
| X-Frame-Options | Clickjacking saldırılarını önler | DENY |
| Strict-Transport-Security | HTTPS zorunlu kılar | max-age=31536000; includeSubDomains |
| X-XSS-Protection | Tarayıcı XSS filtresini etkinleştirir | 1; mode=block |
| Cache-Control | Hassas verilerin önbelleklenmesini önler | no-store, no-cache |
API Penetrasyon Testi
Düzenli penetrasyon testleri, API güvenlik açıklarının keşfedilmesi ve giderilmesi için vazgeçilmezdir. Penetrasyon testi hem otomatik araçlarla hem de manuel testlerle yapılmalıdır.
Otomatik Güvenlik Tarama Araçları
- OWASP ZAP: Açık kaynaklı güvenlik tarayıcısı, API'ler dahil web uygulamalarının güvenliğini test eder
- Burp Suite: Kapsamlı web güvenlik test platformu, API güvenlik testleri için güçlü özellikler sunar
- Postman: API geliştirme aracı olmasının yanı sıra güvenlik testleri için de kullanılabilir
- Nuclei: Şablon tabanlı güvenlik tarayıcısı, hızlı ve esnek tarama imkanı sağlar
Manuel Test Senaryoları
Otomatik araçların tespit edemeyeceği iş mantığı zafiyetlerini bulmak için manuel testler de yapılmalıdır. Bu testlerde yetkilendirme bypass denemeleri, iş akışı manipülasyonu, race condition testleri ve hata mesajlarından bilgi sızıntısı kontrolleri gerçekleştirilmelidir.
API Güvenliği Kontrol Listesi
API geliştirme sürecinizde aşağıdaki kontrol listesini kullanarak güvenlik seviyenizi değerlendirin:
- Tüm endpoint'lerde kimlik doğrulama uygulanıyor mu?
- Nesne düzeyinde yetkilendirme kontrolleri yapılıyor mu?
- Rate limiting aktif mi?
- Tüm girdiler doğrulanıyor mu?
- TLS 1.2 veya üstü kullanılıyor mu?
- Hassas veriler maskeleniyor mu?
- Güvenlik logları düzgün tutuluyor mu?
- API belgeleri güncel mi?
- Eski endpoint'ler devre dışı bırakılmış mı?
- Düzenli güvenlik taramaları yapılıyor mu?
- CORS politikaları doğru yapılandırılmış mı?
- Hata mesajları gereksiz bilgi sızdırmıyor mu?
CI/CD Pipeline'da API Güvenliği
Güvenliği geliştirme sürecinin en başından itibaren entegre etmek (Shift-Left Security), güvenlik açıklarının erken tespit edilmesini ve düzeltilmesini sağlar.
Pipeline'a Entegre Edilecek Güvenlik Kontrolleri
- Statik Kod Analizi (SAST): Kaynak kodundaki güvenlik açıklarının tespiti
- Bağımlılık Tarama: Kullanılan kütüphanelerdeki bilinen zafiyetlerin kontrolü
- Dinamik Güvenlik Testi (DAST): Çalışan uygulamaya yönelik otomatik güvenlik taraması
- API Sözleşme Testi: OpenAPI/Swagger spesifikasyonuna uygunluk kontrolü
- Gizli Bilgi Tarama: Kodda hardcoded şifre, API anahtarı gibi bilgilerin tespiti
Sonuç ve Öneriler
API güvenliği, tek seferlik bir görev değil, sürekli bir süreçtir. Tehditlerin sürekli evrildiği bir ortamda, güvenlik stratejinizi de düzenli olarak güncellemeli ve iyileştirmelisiniz.
API güvenliği yolculuğunuzda şu temel prensipleri her zaman aklınızda tutun:
- Derinlemesine Savunma: Tek bir güvenlik katmanına güvenmeyin, birden fazla katman oluşturun
- En Az Yetki İlkesi: Her kullanıcı ve servis yalnızca ihtiyaç duyduğu minimum yetkiye sahip olmalıdır
- Varsayılan Olarak Güvenli: Yeni endpoint'ler ve özellikler varsayılan olarak kısıtlı olmalıdır
- Sürekli İzleme: Güvenlik olaylarını gerçek zamanlı izleyin ve hızlı yanıt verin
- Güvenlik Kültürü: Tüm ekip üyelerinin güvenlik bilincine sahip olmasını sağlayın
API güvenliği konusunda yatırım yapmak, uzun vadede veri ihlallerinin maliyetinden çok daha düşüktür. Güvenli API'ler tasarlamak, müşterilerinizin güvenini kazanmanın ve sürdürmenin en etkili yollarından biridir.