XSS (Cross-Site Scripting) Nedir? Türleri, Çalışma Prensibi ve Korunma Yöntemleri

XSS (Cross-Site Scripting), saldırganın kötü amaçlı JavaScript kodlarını hedef web sitesine enjekte ettiği siber saldırı tekniğidir. Kurbanın tarayıcısında çalışarak oturum bilgilerini, çerezleri veya kişisel verileri çalmak amacıyla kullanılır. Web geliştirici ve site yöneticilerinin en sık karşılaştığı güvenlik tehditleri arasında yer alır.

5 dk okuma
XSS (Cross-Site Scripting)

XSS (Cross-Site Scripting), saldırganın kötü amaçlı kodları (genellikle JavaScript) bir web uygulamasına enjekte ederek kullanıcıların tarayıcılarında bu kodu çalıştırmasını sağlayan bir siber saldırı yöntemidir. Bu saldırı türü, web uygulamalarının kullanıcı girdisini düzgün şekilde doğrulamadığı veya temizlemediği durumlarda ortaya çıkar. Saldırgan, bu açıktan yararlanarak kurbanın oturum bilgilerini çalabilir, finansal işlemler gerçekleştirebilir, kişisel verileri indirebilir veya kimlik avı sayfalarına yönlendirebilir.

XSS (Cross-Site Scripting) Nasıl Çalışır?

XSS saldırısının temel çalışma prensibi oldukça basittir:

  • Açık Belirleme: Saldırgan, web uygulamasında kullanıcı girdisini doğru şekilde temizlemeyen bir nokta bulur. Örneğin, arama çubuğu, yorum bölümü, profil bilgileri veya form alanları bu açıklar arasında yer alabilir.
  • Kod Enjeksiyonu: Kötü amaçlı JavaScript kodu, bu giriş alanlarına gömülü şekilde gönderilir. Örneğin: <script>alert('XSS')</script>
  • Kod Yürütülmesi: Web sunucusu bu kodu sayfaya dahil ederek başka kullanıcılara gönderir.
  • Kurbanın Tarayıcısında Çalışma: Hedef kullanıcının tarayıcısı sayfayı yüklerken enjekte edilen JavaScript otomatik olarak çalışır.
  • Veri Hırsızlığı: Çalışan kod, çerezleri çalabilir, oturum tokenlarını gönderebilir veya DOM manipülasyonu yapabilir.

XSS (Cross-Site Scripting) Türleri

XSS saldırıları, enjeksiyonun gerçekleştiği yere ve kalıcılığına göre üç ana türe ayrılır:

XSS Türü Tanımı Örnek
Reflected XSS Kötü amaçlı kod URL parametresinde taşınır, sunucu tarafından anında yanıta yansıtılır. Depolanmaz, tek bir saldırı için yeterlidir. example.com/search?q=<script>...</script>
Stored XSS Kötü amaçlı kod veritabanında kalıcı olarak depolanır. Sayfa her açıldığında çalışır, potansiyel olarak binlerce kullanıcıyı etkiler. Blog yorumlarına enjekte edilen kod, her okuyucu için çalışır.
DOM-based XSS Zafiyet tarayıcı tarafında (istemci tarafında) yer alır. JavaScript, DOM öğelerini güvenli olmayan şekilde manipüle eder. document.innerHTML = userInput (doğrulanmamış)

XSS Saldırılarının Hedefleri

XSS saldırıları çeşitli zararlı amaçlar için kullanılır:

  • Oturum Bilgisi Hırsızlığı: Kullanıcının çerezleri veya session token'ları çalınarak hesabı ele geçirilir.
  • Kimlik Avı (Phishing): Sahte login formları gösterilerek kullanıcıdan şifre alınır.
  • Malware Dağıtımı: Zararlı yazılım indirtme sayfalarına yönlendirme yapılır.
  • Finansal Dolandırıcılık: Banka veya ödeme sayfalarına yönlendirilerek işlem bilgileri çalınır.
  • Cihaz Kontrolü: Kurbanın cihazı bot ağına dahil edilerek DDoS saldırılarında kullanılır.
  • İtibar Kaybı: Web sitesi sayfası değiştirilerek ya da zararlı içerik yayılarak site kredibilitesi zedelenicilir.

XSS Saldırılarından Korunma Yöntemleri

Web geliştiricileri ve site yöneticileri XSS tehditlerine karşı birden fazla katmanlı savunma uygulamalıdır:

  • Giriş Doğrulaması (Input Validation): Tüm kullanıcı girdileri, beklenen türe ve uzunluğa göre kontrol edilmelidir. Yalnızca gerekli karakterlere izin verilir.
  • Çıktı Kodlaması (Output Encoding): Veritabanından çekilen veriler HTML, JavaScript, URL veya CSS bağlamına göre kodlanmalıdır.
  • İçerik Güvenliği Politikası (CSP): HTTP başlık aracılığıyla sayfada çalışabilecek kaynaklar sınırlandırılır: Content-Security-Policy: script-src 'self'
  • HttpOnly ve Secure Bayrakları: Çerezler JavaScript tarafından erişilemez olacak şekilde işaretlenmelidir: Set-Cookie: sessionId=abc; HttpOnly; Secure
  • Templating Engine Kullanımı: Güvenli templating motorları (Jinja2, Handlebars) otomatik olarak tehlikeli karakterleri kaçırır.
  • Web Application Firewall (WAF): Kötü amaçlı istekleri filtrelemek için WAF gibi güvenlik araçları kullanılır.
  • Düzenli Güvenlik Testleri: Penetration testing ve code review ile açıklar erken tespit edilir.
  • Kütüphaneler ve Framework'ler: Django, React, Vue gibi modern framework'ler varsayılan olarak XSS koruması sağlar.

Tarihi Gelişimi

XSS ilk olarak 1990'ların sonlarında web uygulamaları yaygınlaşmaya başladığında ortaya çıktı. 2000'li yılların başında, büyük web siteleri (Microsoft, Google gibi) saldırılara uğradığında yaygın olarak fark edildi. 2007 yılında OWASP (Open Web Application Security Project) tarafından yayımlanan Güvenlik Açıkları Listesinde ilk üç sırada yer aldı ve halen de en kritik web güvenlik tehditleri arasında bulunmaktadır.

"XSS saldırıları, web uygulamalarının en yaygın ve tehlikeli güvenlik açıklarıdır. Milyonlarca kullanıcının kişisel verisi günde birden fazla kez bu yöntemle riske atılır." — OWASP Güvenlik Raporu

Gerçek Dünya Örnekleri

  • Twitter (2010): DOM-based XSS açığı sayesinde kullanıcı hesapları ele geçirilmiş, spam tweetleri otomatik olarak gönderilmişti.
  • Facebook (2013): Stored XSS, kullanıcıların duvar sayfalarında kötü amaçlı içerik yayılmasına neden olmuştu.
  • eBay (2015): Reflected XSS açığından yararlanan saldırganlar, sahte ödeme sayfalarına yönlendirmişlerdi.
  • Web Uygulamaları (Günümüz): E-ticaret sitelerindeki arama çubukları, sosyal medya yorum bölümleri ve forum platformları halen XSS açığına maruztur.
XSS (Cross-Site Scripting) ve SQL Injection arasındaki fark nedir?+
XSS, kötü amaçlı JavaScript kodunu kullanıcının tarayıcısında çalıştırmayı hedeflerken; SQL Injection, veritabanı sorguları manipüle ederek veri değiştirme veya çalmayı amaçlar. XSS istemci tarafında (tarayıcı), SQL Injection sunucu tarafında (veritabanı) işlenir.
XSS saldırısı yaşadığımı nasıl anlarım?+
Web sitesinde beklenmedik JavaScript uyarıları çıkması, sayfanın beklenmedik şekilde değişmesi, reklam popupları görünmesi veya tarayıcınızın başka sitelere yönlendirmesi XSS'nin işaretleridir. Güvenlik günlüklerde de şüpheli JavaScript kodu kayıtları görülebilir.

X harfindeki diğer terimler