# OWASP A01:2021 – Kırık Erişim Kontrolü (Broken Access Control) Rehberi ve Sızma Testi Analizi > **E-E-A-T Uzman İncelemesi**: OWASP Top 10 listesinin ilk sırasında yer alan Kırık Erişim Kontrolü zafiyeti, yetkisiz kullanıcıların kendi erişim seviyelerinin ötesindeki kaynaklara ulaşmasına olanak tanır. Bu rehberde zafiyetin türleri, istismar senaryoları ve savunma prensipleri ele alınmaktadır. --- ## 1. Giriş: Erişim Kontrolünün Önemi ve Zafiyet Mantığı Erişim kontrolü (Access Control), kullanıcıların kendilerine izin verilen sınırlar dahilinde hareket etmesini sağlayan güvenlik duvarıdır. Bu mekanizmanın yetersiz uygulanması; veri sızıntılarına, yetkisiz veri değişikliğine ve hatta hedef sistemin tamamen ele geçirilmesine yol açabilir. --- ## 2. Kırık Erişim Kontrolü Türleri ve Teknik Detaylar | Zafiyet Türü | Kısaltma | Açıklama | | :--- | :--- | :--- | | **Doğrudan Nesne Referansı** | IDOR / BOLA | URL veya API isteklerindeki ID parametresinin değiştirilmesiyle yetkisiz veri okuma. | | **Yatay Yetki Yükseltme** | Horizontal Escalation | Aynı yetki seviyesindeki başka bir kullanıcının hesabına veya verisine erişme. | | **Dikey Yetki Yükseltme** | Vertical Escalation | Normal kullanıcı seviyesinden Admin (Yönetici) seviyesine yetki sıçratma. | | **Güvensiz CORS Yapılandırması**| Misconfigured CORS | `Access-Control-Allow-Origin: *` ve `credentials: true` birleşimiyle veri sızdırma. | --- ## 3. Örnek İstismar Senaryosu: IDOR / BOLA (Broken Object Level Authorization) Aşağıdaki API isteğinde, oturum açmış `user_id=105` olan standart bir kullanıcı, başka bir kullanıcının faturasını indirmektedir: ```http GET /api/v1/invoices/download?invoice_id=9872 HTTP/1.1 Host: vulnerable-bank.com Authorization: Bearer eyJhbGciOiJIUzI1Ni... ``` Saldırgan `invoice_id=9872` değerini `invoice_id=9873` olarak değiştirdiğinde sunucu erişim yetkisini doğrulamıyorsa başka bir müşterinin faturası sızdırılır. --- ## 4. Güvenli Kodlama ve Savunma Rehberi (Remediation) 1. **Varsayılan Olarak Engelle (Deny by Default)**: Tüm uç noktalarda erişim varsayılan olarak reddedilmeli, sadece yetkili rollere açıkça izin verilmelidir. 2. **Kullanıcı Oturumu İle Doğrulama**: Veritabanı sorgularında doğrudan URL parametresi değil, oturumdaki (JWT/Session) `user_id` kullanılmalıdır: ```php // ZAFİYETLİ KOD: $invoice = DB::fetch("SELECT * FROM invoices WHERE id = ?", [$_GET['invoice_id']]); // GÜVENLİ KOD: $invoice = DB::fetch("SELECT * FROM invoices WHERE id = ? AND user_id = ?", [$_GET['invoice_id'], $_SESSION['user_id']]); ``` --- ## 5. Sonuç Kırık Erişim Kontrolü, otomatize tarayıcıların en çok kaçırdığı zafiyet türüdür. Sızma testi süreçlerinde manuel mantıksal kontrollerin yapılması şarttır.