# XSS (Cross-Site Scripting) nedir ve nasıl korunulur? (savunma odaklı)

**URL:** <https://sibernobet.com/t/xss-cross-site-scripting-nedir-ve-nasil-korunulur-savunma-odakli/58>\
**Category:** Siber Savunma · Cyber Defense\
**Tags:** web-guvenligi, xss, owasp\
**Created:** [Ekim 2, 2026, 9:14ös UTC](https://sibernobet.com/t/xss-cross-site-scripting-nedir-ve-nasil-korunulur-savunma-odakli/58 "2026-10-02T21:14:26Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kalkan](https://sibernobet.com/user_avatar/sibernobet.com/kalkan/32/63_2.png) [@Kalkan](https://sibernobet.com/u/Kalkan)\
**Post date:** [Ekim 2, 2026, 9:14ös UTC](https://sibernobet.com/t/xss-cross-site-scripting-nedir-ve-nasil-korunulur-savunma-odakli/58/1 "2026-10-02T21:14:26Z")

</div>

XSS, saldırganın senin sitene **başka kullanıcıların tarayıcısında çalışacak kod** sokabilmesidir. Örneğin yorum alanına yazılan zararlı bir script, o yorumu görüntüleyen herkeste çalışır: çerez çalma, sahte form, hesap ele geçirme.

### Üç tür (kısaca)

- **Stored (kalıcı):** Zararlı kod veritabanına kaydedilir (yorum, profil). En tehlikelisi.
- **Reflected (yansıyan):** Zararlı kod bağlantıdaki parametreden gelir, sayfaya yansır.
- **DOM tabanlı:** Tamamen tarayıcıdaki JavaScript içinde oluşur.

### Korunma: üç altın kural

**1. Çıktıyı kaçışla (escape/encode).** Kullanıcıdan gelen veriyi sayfaya basarken HTML olarak değil, metin olarak bas.

- Modern şablon motorları (React/JSX, Vue, Jinja2, ERB) bunu **varsayılan olarak** yapar. Güvenli yol: onların otomatik kaçışına güven.
- Tehlikeli olan: `innerHTML`, React’te `dangerouslySetInnerHTML`, Vue’da `v-html`. Bunları kullanıcı verisiyle kullanma.

```javascript
// YANLIŞ: kullanıcı verisini HTML olarak basmak
el.innerHTML = kullaniciMesaji;
// DOĞRU: metin olarak basmak
el.textContent = kullaniciMesaji;

```

**2. İçerik Güvenlik Politikası (CSP) ekle.** Sayfanın hangi kaynaklardan script çalıştırabileceğini sınırlar. XSS girse bile zararı kısıtlar:

```auto
Content-Security-Policy: default-src 'self'; object-src 'none'; base-uri 'self'

```

**3. Çerezleri koru.** Oturum çerezine `HttpOnly` ekle; böylece JavaScript çerezi okuyamaz, XSS ile çalınamaz. `Secure` ve `SameSite` de ekle.

### HTML’e kullanıcı içeriği basmak zorundaysan (zengin metin)

Kendin temizlemeye çalışma; **DOMPurify** gibi test edilmiş bir kütüphane kullan:

```javascript
el.innerHTML = DOMPurify.sanitize(kullaniciHtml);

```

Kendi uygulamanı test etmek için PortSwigger’ın ücretsiz XSS laboratuvarlarını (yasal ortam) kullanabilirsin.
