← Blog
Guvenlik8 dk okumaMegis

XSS Saldiri Onleme: Cross-Site Scripting Korumasi

XSS saldirilarini anlayarak web uygulamalarinizi cross-site scripting aciklarina karsi koruyun.

XSS (Cross-Site Scripting) Nedir?

XSS (Cross-Site Scripting), web uygulamalarinda en yaygin gorulen guvenlik acikliklarindan biridir. Saldirgan, bir web sayfasina zararli JavaScript kodu enjekte eder ve bu kod, sayfayi goruntuueleyen diger kullanicilarin tarayicisinda calisir. OWASP Top 10 listesinde yillardiiir ust siralarda yer alan XSS, 2026 yilinda hala web uygulamalarinin en kritik tehditlerinden biridir.

Basarili bir XSS saldirisi, kullanici oturum bilgilerinin (cookie) calinmasina, sayfaa iceriginin degistirilmesine, kullanicinin zaraarli sitelere yonlendirilmesine, klavye girislerinin kaydedilmesine (keylogging) ve hatta hesap ele gecirmeye (account takeover) yol acabilir. Bu rehberde, XSS saldiri turlerini, onleme yontemlerini ve test tekniklerini detayli sekilde inceleyecegiz.

XSS Turleri

1. Depolanan XSS (Stored/Persistent XSS)

En tehlikeli XSS turudur. Zararli kod, sunucuda kalici olarak depolanir (veritabani, dosya sistemi, log dosyasi) ve sayfayi goruntuuleyen her kullaniciya iletilir.

  • Saldiri Senaryosu: Saldirgan, bir forum gonderisine veya yorum alanina zararli JavaScript kodu yazar. Bu kod veritabanina kaydedilir. Sayfayi ziyaret eden her kullanicinin tarayicisinda kod otomatik olarak calisir.
  • Ornek Vektorler: Blog yorumlari, forum gonderileri, kullanici profil bilgileri, urun incelemeleri, destek biletleri.
  • Etki: Cok sayida kullaniciyi etkileyebiilir. Saldigran aktif olarak bir sey yapmadan saldiri devam eder.

2. Yansitilan XSS (Reflected XSS)

Zararli kod, sunucuda depolanmaz; HTTP istegi uzerinden gonderilir ve sunucu yaniti icinde kullaniciya geri yansitilir.

  • Saldiri Senaryosu: Saldirgan, zararli kod iceren bir URL olusturur ve kurbanin bu URL'ye tiklamasini saglar (phishing e-postasi, sosyal medya mesaji vb.). Sunucu, URL parametresindeki kodu yanit sayfasina dahil eder.
  • Ornek Vektorler: Arama sonuc sayfalari, hata mesajlari, yonlendirme parametreleri.
  • Etki: Sadece ozel hazirlanmis URL'ye tiklayan kullaniciilari etkiler.

3. DOM Tabanli XSS (DOM-based XSS)

Zararli kod, sunucu tarafinda islenmmez; tamamen istemci tarafinda (tarayicida) JavaScript ile DOM manipulasyonu sirasinda tetiklenir.

  • Saldiri Senaryosu: Web uygulamasinndaki JavaScript kodu, URL fragment'ini (#), sorgu parametresini veya diger kullanici kontrolllu veri kaynaklarini dogrudan DOM'a yazar.
  • Ornek Vektorler: document.location, document.URL, document.referrer, window.name degiskenlerini dogrudan innerHTML veya document.write() ile kullanan kodlar.
  • Etki: Sunucu loglarinda iz birakmadan caliisabilir, tespit edilmesi daha zordur.

Content Security Policy (CSP)

CSP, XSS saldirilarina karsi en guclu savunma mekanizmalarindan biridir. Tarayiciya, hangi kaynaklardan icerik yuuklenmesine izin verildigini bildiren bir HTTP baslik (header) politikasiidir.

Temel CSP Direktivleri

  • default-src: Tum kaynak turleri icin varsayilan politika.
  • script-src: JavaScript kaynaklarini sinirlar. 'self' ile sadece kendi domain'inizden script yuklenmesine izin verin.
  • style-src: CSS kaynaklarini sinirlar.
  • img-src: Gorsel kaynaklarini sinirlar.
  • connect-src: AJAX, WebSocket ve diger ag baglantiilarini sinirlar.
  • frame-src: iframe kaynaklarini sinirlar.

CSP Uygulama Ornegi

Katii bir CSP baslligi ornegi:

Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-abc123'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self' https://api.example.com; frame-ancestors 'none';

CSP En Iyi Uygulamalari

  • Report-Only Moduyla Baslayin: Content-Security-Policy-Report-Only basligini kullanarak once ihlalleri izleyin, sonra zorunlu killin.
  • Nonce Kullanin: Inline script'ler icin rastgele nonce degerleri kullanin. Her istek icin yeni nonce uretin.
  • unsafe-inline ve unsafe-eval'dan Kacinin: Bu direktifler CSP'nin koruma gucunu ciddi sekilde azaltir.
  • Raporlama: report-uri veya report-to direktifi ile CSP ihlallerini izleyin.

Girdi Temizleme (Input Sanitization)

Kullanici girdilerini temizlemek, XSS'e karsi temel savunma katmanidir:

Sunucu Tarafinda

  • Beyaz Liste Yaklasimi: Izin verilen karakterleri, formatlari ve degerleri tanimlayin. Kara liste yerine beyaz liste kullanin.
  • HTML Temizleme: Kullanici girdisinden zararli HTML etiketlerini ve ozelliklerini kaldirin. DOMPurify (JavaScript), Bleach (Python), HTMLPurifier (PHP) gibi kutuuphaneler kullanin.
  • Dogrulama: Girdi turunu, uzunlugunu, formatini ve izin verilen deger araligini dogrulayin. E-posta alani sadece gecerli e-posta formatini kabul etmelidir.

Istemci Tarafinda

  • Istemci tarafii dogrulama yeterli degildir: Her zaman sunucu tarafinda da dogrulama yapin. Istemci dogrulaamasi kolayca atlanabilir.
  • DOM Manipulasyonunda Dikkat: innerHTML yerine textContent kullanin. document.write()'dan kaciniin.

Cikti Kodlama (Output Encoding)

Cikti kodlama, kullanici verilerini goruntulerken zaraarli karakterleri guvenli karsiliklarina donusturme islemidir. Verinin kullanildigi baglama gore dogru kodlama yontemi kullanilmalidir:

BaglamKodlamaOrnek
HTML GgovdesiHTML Entity Encoding< → &lt; > → &gt;
HTML OzellikleriAttribute Encoding" → &quot; ' → &#x27;
JavaScriptJavaScript Encoding' → \x27 " → \x22
URLURL Encoding< → %3C > → %3E
CSSCSS EncodingOzel karakterler → \HH formati

Onemli: Dogru baglamda dogru kodlama kullanin. HTML kodlama, JavaScript baglaaminda etkisizdir; her baglam kendi kodlama yontemini gerektirir.

Framework Korumalari

Modern web frameworkleri, varsayilan olarak XSS korumalari sunar:

  • React: JSX, varsayilan olarak tum degerleri kacarir (escape). dangerouslySetInnerHTML kullaniminndan kacinin.
  • Angular: Varsayilan olarak tum veri baglamalarinda sanitizasyon uygular. bypassSecurityTrust* yontemlerini dikkatli kullanin.
  • Vue.js: Template syntax'i varsayilan olarak HTML kaclissi uygular. v-html direktifini sadece guvenilir icerikle kulllanin.
  • Next.js: React tabanli oldugundan ayni korumalar gecerlidir. Server Components ile ek guvenlik katmani saglar.

XSS Test Yontemleri

Uygulamanizi XSS acikllarina karsi duzenli olarak test etmelisiniz:

  • Manuel Test: Yaygin XSS payload'larini girdi alanlarinda deneyin. OWASP XSS Filter Evasion Cheat Sheet referans olarak kullanilabilir.
  • Otomatik Tarama: OWASP ZAP, Burp Suite, Acunetix gibi aracllarla otomatik guvenlik taramasi yapin.
  • Kod Incelemesi: Kaynak kodu inceleyerek guvenli olmayan girdi/cikti islemlerini tespit edin. Statik analiz araclari (SonarQube, ESLint security plugins) kullanin.
  • Penetrasyon Testi: Profesyonel penetrasyon test ekipleriyle duzzenli guvenlik testleri yaptiirin.

Ek Guvenlik Basliklari

CSP'nin yaninda XSS korumasini gucllendirecek ek HTTP basliklari:

  • X-Content-Type-Options: nosniff — MIME tipi koklama saldirilarini onler.
  • X-Frame-Options: DENY — Clickjacking saldiiirlarini onler.
  • Referrer-Policy: strict-origin-when-cross-origin — Referrer bilgisi sizintisini sinirlar.
  • Permissions-Policy — Tarayici ozelliklerine (kamera, mikrofon, konum) erisimi sinirlar.

Sonuc

XSS, web guvenlliginiin en yaygin ve tehlikeli tehditlerinden biridir. Etkili koruma, katmanli bir yaklasim gerektirir: girdi temizleme, cikti kodlama, CSP uygulamasi, framework korumalarinin dogru kullanimi ve duzenli guvenlik testleri. Hicbir tek onlem yuzde 100 koruma saglamaz; bu nedenle derinleemesine savunma (defense in depth) prensibini uygulayin. Guvenlik, uygulama yasam dongusunun her asamasinda dusunulmesi gereken bir konudur; gelistirme surecinin basinda entegre edin, sonradan eklemeye calismayiin.

#xss#cross-site scripting#guvenlik acigi#input validation