Teknik Detaylar

REST Api Güvenliği Nasıl Sağlanır?

← Teknik Detaylar
2021-02-16 ~ 2022-05-11 · 5 dk okumaRead in English →
REST Api Güvenliği Nasıl Sağlanır?
Bu yazıyı yapay zekâ ile tartış
Sayfayı kopyala

💡 Özet (TL;DR):

  • Neden Önemli? REST API'ler, dış dünyaya açık kapılardır. Doğru yapılandırılmamış bir API; veri sızıntılarına, yetkisiz erişimlere ve DDoS saldırılarına davetiye çıkarır.
  • Temel Güvenlik Katmanları: HTTPS (şifreleme), yetkilendirme (OAuth2/JWT), girdi doğrulaması (XSS/SQLi önleme), CORS yapılandırması ve hız sınırlamadır (Rate Limiting).
  • Referans: Güvenlik mimarinizi oluştururken OWASP API Security Top 10 standartlarını temel almalısınız.

Bu yazı RESTFul Api Tasarım İncelikleri serisinin bir parçası niteliğindedir. Eğer okumadıysanız önce serinin diğer yazılarını okumanızı tavsiye ederim:


1. Taşıma Katmanı Güvenliği: HTTPS ve TLS

REST API güvenliğinin en temel ve tavizsiz ilk adımı HTTPS protokolüdür. Üretim ortamındaki (production) bir REST API'nin yalnızca HTTPS üzerinden çalışması şarttır.

HTTP kullanmak, evinizin kapısını kilitleyip pencereleri sonuna kadar açık bırakmaya benzer. Şifrelenmemiş HTTP trafiği, ağ üzerindeki herhangi biri tarafından dinlenebilir (Man-in-the-Middle - MitM saldırıları). HTTPS, istemci ile sunucu arasındaki tüm trafiği TLS (Transport Layer Security) kullanarak şifreler.

🔒 Ek Güvenlik: Sadece HTTPS kullanmak yetmez; API sunucunuzda eski SSL ve zayıf TLS sürümlerini (TLS 1.0 ve 1.1) devre dışı bırakmalı, güncel ve güvenli olan TLS 1.2 ve TLS 1.3 protokollerini zorunlu kılmalısınız.


2. Kimlik Doğrulama ve Yetkilendirme (AuthN & AuthZ)

API'niz herkese açık değilse, her isteğin kim tarafından yapıldığını doğrulamak (Authentication) ve bu kişinin talep ettiği işleme izni olup olmadığını denetlemek (Authorization) zorundasınız.

  • JWT (JSON Web Token): Durumsuz (stateless) API'ler için oldukça popülerdir. Ancak JWT kullanırken token'ların şifrelenmesi için RS256 (asimetrik) gibi güvenli algoritmalar tercih edilmeli ve token süresi (Expiration Time) kısa tutulmalıdır.
  • OAuth 2.0: Üçüncü parti uygulamaların kullanıcı verilerine güvenli erişim sağlaması için endüstri standardıdır.
  • API Keys: Sistemler arası (Machine-to-Machine) basit iletişimler için kullanılabilir. Ancak API anahtarları asla URL parametrelerinde değil, HTTP Header'larında (X-API-Key) taşınmalıdır.

Kimlik doğrulama yöntemleri hakkında daha detaylı bilgi için serinin ilgili yazısına göz atabilirsiniz: 👉 REST API Kimlik Doğrulama Nasıl Yapılır?


3. Girdi Doğrulaması (Input Validation) ve Temizleme

İstemciden gelen hiçbir veriye asla güvenmemelisiniz. API'nize gelen tüm girdiler (URL parametreleri, sorgu parametreleri, HTTP gövdesi ve HTTP başlıkları) sunucu tarafında sıkı bir doğrulamadan geçirilmelidir.

  • SQL Injection (SQLi): Ham SQL sorguları yerine hazırlıklı ifadeler (Prepared Statements / ORM) kullanın.
  • XSS (Cross-Site Scripting): HTML etiketlerini ve JavaScript betiklerini temizleyin (Sanitization).
  • İstek Boyutu Sınırı: Sunucuya devasa boyutlarda JSON veya dosya gönderilerek hafızanın (RAM) şişirilmesini engellemek için maksimum istek boyutunu (örneğin 1MB veya 10MB) sınırlandırın.

PHP PDO Kullanarak Güvenli Veri Sorgulama Örneği:

// Hatalı ve Güvensiz Yöntem (SQL Injection'a açık)
$input = $_GET['username'];
$query = "SELECT * FROM users WHERE username = '$input'"; 

// Doğru ve Güvenli Yöntem (Prepared Statement)
$statement = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$statement->execute(['username' => $_GET['username']]);
$user = $statement->fetch();

4. CORS (Cross-Origin Resource Sharing) Yapılandırması

CORS, tarayıcıların API'nize farklı origin'lerden (alan adlarından) gelen istekleri yapıp yapamayacağını kontrol eden bir güvenlik mekanizmasıdır.

Birçok geliştirici kolaylık olsun diye Access-Control-Allow-Origin: * (herkese izin ver) başlığını kullanır. Ancak kimlik doğrulama gerektiren, hassas veriler barındıran API'lerde bu başlık büyük bir güvenlik açığıdır. API'nize yalnızca izin verdiğiniz web uygulamalarının erişebilmesi için spesifik alan adlarını tanımlamalı ve Credentials (çerez/Authorization header) geçişlerini doğru yapılandırmalısınız.


5. Hız Sınırlaması (Rate Limiting)

İsteklere sunucu veya uygulama seviyesinde sınır koymak, API'nizi kaba kuvvet (Brute Force) ve DDoS saldırılarına karşı korur. Ayrıca kaynaklarınızın aşırı tüketilmesini (resource starvation) engeller.

API kullanıcılarının bu limitlere uyum sağlayabilmesi için HTTP yanıtlarında bilgilendirici başlıklar dönülmelidir:

X-Rate-Limit-Limit: 1000      # Mevcut periyotta izin verilen maksimum istek
X-Rate-Limit-Remaining: 985   # Mevcut periyotta kalan istek hakkı
X-Rate-Limit-Reset: 16200000  # Limitin sıfırlanacağı Unix zaman damgası

Limit aşıldığında API, standart olarak 429 Too Many Requests HTTP durum koduyla yanıt vermelidir.


6. Hata Yönetimi ve Bilgi İfşası (Information Disclosure)

Hataları yönetirken geliştiriciye kolaylık sağlamak ile saldırganlara bilgi sızdırmak arasındaki dengeyi iyi kurmalısınız. Hata yanıtlarında asla sistem mimarisini ele verecek veritabanı şemaları, stack trace (kod yığın izi) veya sunucu sürüm bilgileri paylaşmlmamalıdır.

  • Hatalı: Database Connection Error: Access denied for user 'admin'@'10.0.0.5' (using password: YES)
  • Doğru: Internal Server Error. Please contact support with request ID: #98231

7. WAF (Web Application Firewall) Kullanımı

Uygulama kodunuzda güvenlik önlemleri alsanız da, SQL Injection, XSS ve DDoS gibi saldırıları uygulama katmanına ulaşmadan engellemek kaynak yönetimi açısından çok daha verimlidir. Cloudflare, AWS WAF gibi bulut tabanlı sistemler veya sunucu düzeyinde kurulacak modüller (ModSecurity vb.) saldırı isteklerini en alt katmanda filtreleyerek sunucunuzun yükünü hafifletir.


Güvenlik Yöntemleri Karşılaştırma Tablosu

Güvenlik KatmanıHangi Saldırıyı Önler?Zorluk DerecesiMaliyet / Performans Etkisi
HTTPS (TLS 1.3)MitM (Ortadaki Adam), DinlemeDüşükÇok Düşük (Modern CPU'lar için önemsiz)
Rate LimitingDDoS, Brute Force, Kaynak SömürüsüOrtaDüşük (Redis/Memcached ile kolayca çözülür)
Input ValidationSQL Injection, XSS, Buffer OverflowYüksek (Sürekli bakım gerekir)Yok (İşlemci üzerinde minimal yük)
CORS ConfigCSRF, Yetkisiz Tarayıcı İstekleriDüşükYok
WAFBilinen tüm Web zafiyetleri ve botlarOrtaDeğişken (Bulut sağlayıcı ücretleri)

Aklımıza geldikçe veya yeni standartlar geliştikçe buraya yeni başlıklar veya bilgiler ekleyeceğim. Bir sonraki bölümde API dokümantasyonunun nasıl yapıldığını inceleyeceğiz.

👉 REST Api Dokümantasyonu Nasıl Oluşturulur?

Bu Yazıda Yapılan Değişiklikler
  • 20.06.2026: Yazı içeriği modernize edildi. OWASP API Security ilkeleri doğrultusunda CORS yapılandırması, girdi doğrulama için güvenli PHP PDO kod örneği, TLS sürüm detayları ve karşılaştırma tablosu eklenerek LLO optimizasyonları yapıldı.
  • 11.05.2022: Yazı özeti düzenlendi.