
XSS Zafiyeti (Cross-Site Scripting) Nedir?
XSS zafiyeti nedir, kötü niyetli kişilerin (hackerların), zafiyet barındıran bir web sayfasına veya uygulamasına zararlı istemci taraflı (client-side) betikler (genellikle JavaScript kodları) enjekte etmesine olanak tanıyan kritik bir web güvenliği açığıdır.
Normal şartlar altında, tarayıcınız (Chrome, Firefox, Safari vb.) güvendiğiniz bir web sitesine bağlandığında, o sitenin sunduğu tüm kodları meşru ve güvenli kabul ederek çalıştırır. Ancak, bir sitede XSS açığı bulunuyorsa, saldırgan kendi hazırladığı zararlı kodu sistemin orijinal kodlarına sızdırabilir. Tarayıcı, bu zararlı betiği sitenin kendi kodu sanarak çalıştırdığında XSS saldırısı başarıyla gerçekleşmiş olur. XSS saldırılarının en ayırt edici özelliği, doğrudan sunucuyu veya veritabanını değil, doğrudan web sitesini ziyaret eden masum kullanıcıları hedef almasıdır.
XSS Zafiyeti Türleri Nelerdir?
Siber güvenlik uzmanları ve araştırmacılar, uygulamanın zararlı kodu işleme ve sunma şekline bağlı olarak XSS zafiyetlerini üç temel kategoriye ayırmaktadır:
Reflected XSS (Yansıyan XSS)
Günümüzde en sık karşılaşılan XSS türlerinin başında gelir. Zararlı betik, web uygulamasının anında yanıt verdiği bir HTTP isteğine dahil edilir. Örneğin, bir web sitesinin arama kutusuna zararlı bir JavaScript kodu yazıldığında ve uygulama bu girdiyi herhangi bir güvenlik süzgecinden geçirmeden doğrudan ekrana yansıttığında bu zafiyet tetiklenir. Saldırgan, genellikle kurbanı oltalama (phishing) e-postaları veya sosyal mühendislik taktikleriyle, içine zararlı kod gizlenmiş bir bağlantıya (URL) tıklamaya ikna eder.
Stored XSS (Kalıcı XSS)
Web uygulamaları için en tehlikeli ve en yıkıcı XSS türü olarak kabul edilir. Bu senaryoda, saldırganın yazdığı zararlı betik, doğrudan uygulamanın veritabanına, yorum alanlarına, forum mesajlarına, ürün incelemelerine veya kullanıcı profillerine kaydedilir. Zararlı kodun eklendiği sayfayı ziyaret eden istisnasız her kullanıcı, bu betiğin tarayıcısında otomatik olarak çalışmasına maruz kalır. Stored XSS’te saldırganın kurbanlara özel linkler göndermesine gerek yoktur; kurbanların siteyi ziyaret etmesi enfekte olmaları için yeterlidir.
DOM Tabanlı XSS
DOM (Document Object Model) tabanlı XSS zafiyeti, klasik sunucu taraflı zafiyetlerden farklı olarak tamamen istemci tarafında gerçekleşir. Sayfanın HTML kaynağı veya HTTP yanıtı değişmez; zafiyet, sayfa içinde çalışan meşru JavaScript kodunun, zararlı bir girdiyi (örneğin URL’deki bir hashtag parametresini) güvenli olmayan bir şekilde işlemesi ve DOM’u manipüle etmesiyle tetiklenir.
XSS Saldırılarının Etkileri ve Doğurduğu Zararlar
Başarılı bir XSS saldırısı, hedef sistemde ve o sistemi kullanan ziyaretçilerde son derece ağır sonuçlara yol açabilir. Saldırganın yapabilecekleri, enjekte ettiği JavaScript kodunun karmaşıklığına bağlıdır:
Oturum Çalma (Session Hijacking): Kullanıcıların aktif oturum çerezleri (cookies) ele geçirilerek hesaplarına izinsiz giriş yapılabilir.
Yetki Yükseltme ve Hesap Devralma: Kurban eğer sistem yöneticisi (admin) yetkilerine sahipse, saldırgan arka planda yöneticinin yetkilerini kullanarak tüm sistemin kontrolünü ele geçirebilir.
Zararlı Yazılım Dağıtımı: Kullanıcılar, hiçbir şey fark etmeden arka planda farklı ve zararlı web sitelerine yönlendirilebilir veya cihazlarına zararlı yazılım (malware) indirmeye zorlanabilir.
Veri Hırsızlığı ve Keylogging: Kullanıcıların formlara girdiği kredi kartı bilgileri, şifreler ve kimlik numaraları gibi hassas veriler anlık olarak klavye dinleme (keylogging) yöntemiyle kopyalanabilir.
XSS Zafiyetinden Korunma Yöntemleri
Web uygulamalarınızı ve değerli kullanıcılarınızı XSS zafiyetlerinden korumak, modern yazılım geliştirme döngüsünün (SDLC) kalbinde yer almalıdır. Güvenli kodlama mimarisini inşa ederken, PortSwigger Web Security Academy veya OWASP gibi küresel otoritelerin rehberliklerinden faydalanmak şarttır. Uygulamanız gereken temel adımlar şunlardır:
Sıkı Girdi Doğrulama (Input Validation): Kullanıcıdan alınan tüm veriler (form doldurmaları, URL parametreleri, API istekleri) sıkı bir doğrulamadan geçirilmelidir. İzin verilmeyen karakterleri temizlemek yerine, sadece beklenen veri formatına izin veren “Whitelist” (Beyaz Liste) politikası uygulanmalıdır.
Kapsamlı Çıktı Kodlama (Output Encoding): Veritabanından veya kullanıcıdan alınan veriler tarayıcı ekranına basılmadan hemen önce, HTML, JavaScript, CSS ve URL bağlamına uygun olarak kesinlikle kodlanmalıdır (encode edilmelidir). Bu sayede tehlikeli etiketler tarayıcı tarafından çalıştırılabilir bir komut olarak değil, zararsız bir düz metin olarak okunur.
İçerik Güvenlik Politikası (CSP) Kullanımı: Content Security Policy (CSP), tarayıcıya hangi kaynaklardan gelen betiklerin çalıştırılabileceğini dikte eden çok güçlü bir HTTP güvenlik başlığıdır. Doğru yapılandırılmış bir CSP, XSS saldırılarının etkisini neredeyse sıfıra indirebilir.
HTTPOnly ve Secure Bayrakları: Kullanıcı oturumlarını yöneten çerezleri (cookies) oluştururken
HttpOnlybayrağını etkinleştirmek, istemci taraflı JavaScript kodlarının bu çerezlere erişmesini fiziksel olarak engeller. Bu adım, oturum çalınma riskini ortadan kaldırır.Modern Frameworklerin Gücünden Yararlanın: React, Angular veya Vue.js gibi güncel frontend teknolojileri, mimarileri gereği otomatik çıktı kodlama (auto-escaping) yaparak birçok XSS varyasyonuna karşı varsayılan bir koruma kalkanı sunar.
Sonuç
Dijital dünyada web güvenliği, tek seferlik bir işlem değil, sürekli olarak gelişen ve güncel kalınması gereken dinamik bir süreçtir. XSS zafiyeti, on yıllardır varlığını sürdüren ve ihmal edildiğinde telafisi zor veri ihlallerine yol açan kritik bir tehdittir. Web geliştiricilerinin ve sistem yöneticilerinin bu zafiyetin anatomisini çok iyi kavraması; girdi doğrulama, çıktı kodlama ve CSP gibi katmanlı savunma mekanizmalarını projelerinin temel taşı haline getirmesi tartışılmaz bir zorunluluktur. Güvenli bir platform sunmak, kullanıcı sadakatini inşa etmenin ve marka itibarını korumanın en güvenilir yoludur.












