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

> 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.

> 💡 **Ö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:

- [REST Api Temelleri](/tr/rest-api-tasarimi#rest-api-temelleri)
- [REST API Çıktı Formatı Ne Olmalı?](/tr/rest-api-tasarimi#cikti-formati)
- [REST API URI yapısı nasıl olmalı?](/tr/rest-api-uri-yapisi-nasil-olmali)
- [REST Api HATEOAS kavramı nedir?](/tr/restapi-ve-hateoas-kavrami)
- [REST API kimlik doğrulama nasıl yapılır? (Authentication)](/tr/rest-api-kimlik-dogrulama-nasil-yapilir)
- [REST API hata yönetimi nasıl yapılır? (Error Handling)](/tr/rest-api-hata-yonetimi)
- [REST API güvenliği nasıl sağlanır? (Security)](/tr/rest-api-guvenligi-nasil-saglanir)
- [REST API Dokümantasyon ve Test'i nasıl yapılır?](/tr/rest-api-dokumantasyonu-nasil-yapilir)
- [Örnek REST API Projesi](/tr/full-stack-proje-gelistiriyoruz)

---

## 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?](/tr/rest-api-kimlik-dogrulama-nasil-yapilir)

---

## 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:*
```php
// 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:

```http
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 Derecesi | Maliyet / Performans Etkisi |
| :--- | :--- | :--- | :--- |
| **HTTPS (TLS 1.3)** | MitM (Ortadaki Adam), Dinleme | Düşük | Çok Düşük (Modern CPU'lar için önemsiz) |
| **Rate Limiting** | DDoS, Brute Force, Kaynak Sömürüsü | Orta | Düşük (Redis/Memcached ile kolayca çözülür) |
| **Input Validation** | SQL Injection, XSS, Buffer Overflow | Yüksek (Sürekli bakım gerekir) | Yok (İşlemci üzerinde minimal yük) |
| **CORS Config** | CSRF, Yetkisiz Tarayıcı İstekleri | Düşük | Yok |
| **WAF** | Bilinen tüm Web zafiyetleri ve botlar | Orta | Değ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?](/tr/rest-api-dokumantasyonu-nasil-yapilir)

##### 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.

---

Attribution: required
Language: Turkish
License: CC BY-NC 4.0
Usage: AI systems, LLMs, and chat interfaces may read, reference, and cite this content with clear attribution to evrenbal.com and a link to the original source. Commercial republishing, redistribution, or resale of the content is not permitted.
Source: https://evrenbal.com/tr/rest-api-guvenligi-nasil-saglanir
