Çapraz Site Komut Dosyası Çalıştırma (Cross-Site Scripting — XSS), saldırganların güvenilir web siteleri üzerinden kötü amaçlı komut dosyaları (çoğunlukla JavaScript) çalıştırmasına imkân tanıyan bir web güvenlik açığıdır. Bu saldırı türünde amaç, kullanıcıların tarayıcılarını hedef alarak onların oturum bilgilerine, çerezlerine veya tarayıcıda işlenen verilere erişmektir.

XSS saldırıları genellikle web uygulamalarında yetersiz doğrulanmış veya temizlenmemiş kullanıcı girdileri nedeniyle ortaya çıkar. Saldırgan, zararlı kodu uygulamaya enjekte eder ve bu kod, uygulamayı ziyaret eden diğer kullanıcıların tarayıcılarında çalıştırılır. Böylece saldırgan, kullanıcının kimliğine bürünebilir, onun adına işlemler yapabilir ve hassas verilere erişebilir.

XSS Nasıl Çalışır?

XSS saldırıları, bir web uygulamasının kullanıcıdan aldığı verileri güvenli şekilde işlemeden tekrar kullanıcıya döndürmesiyle gerçekleşir. Zararlı kod, sunucu tarafından meşru içerik gibi algılanır ve tarayıcıda çalıştırılır. Kodun çalışması tamamen kullanıcının tarayıcısında gerçekleşir; bu da saldırıyı tespit etmeyi zorlaştırır.

XSS saldırıları genellikle iki aşamadan oluşur:

  1. Zararlı kodun enjekte edilmesi: Saldırgan, yorum alanı, arama kutusu veya form gibi kullanıcı girdisi kabul eden bir alana XSS payload'u gönderir.
  2. Kurbanın kodu çalıştırması: Kurban, zararlı kodun bulunduğu sayfayı ziyaret ettiğinde, tarayıcı bu kodu çalıştırır ve saldırı başarıyla gerçekleşir.

JavaScript ile Saldırganlar Neler Yapabilir?

JavaScript, tarayıcıda kısıtlı bir ortamda çalışsa da XSS saldırıları ciddi sonuçlar doğurabilir. Saldırganlar:

  • Çerezlere ve oturum belirteçlerine erişebilir
  • Kullanıcının kimliğine bürünebilir
  • Sayfanın DOM yapısını okuyup değiştirebilir
  • HTTP istekleri göndererek veri sızdırabilir
  • HTML5 API'leri aracılığıyla konum, kamera veya mikrofon erişimi için kullanıcıyı kandırabilir

Bu yetenekler, XSS'i kimlik hırsızlığı, keylogging ve phishing gibi daha büyük saldırıların başlangıç noktası hâline getirir.

XSS Saldırı Türleri

XSS saldırıları genel olarak üç ana gruba ayrılır:

1. Yansıtılmış XSS (Reflected XSS)

Yansıtılmış XSS, zararlı kodun sunucu üzerinde kalıcı olarak saklanmadığı, yalnızca kullanıcıdan gelen isteğe bağlı olarak çalıştırıldığı bir XSS türüdür. Bu saldırı genellikle bir URL parametresi, arama kutusu veya form girdisi üzerinden gerçekleşir.

Saldırgan, zararlı JavaScript kodu içeren bir bağlantı oluşturur ve bu bağlantıyı kurbana gönderir. Kurban bağlantıya tıkladığında, uygulama bu girdiyi yeterince filtrelemeden HTTP yanıtına ekler ve tarayıcıda çalıştırır. Bu nedenle Reflected XSS saldırıları çoğunlukla phishing e-postaları ve kötü amaçlı linkler aracılığıyla yayılır.

Bu saldırı türü kalıcı değildir; her kurbanın saldırıyı tetiklemesi için özel olarak hazırlanmış bağlantıyı ziyaret etmesi gerekir.

None

2. Depolanmış XSS (Stored XSS)

Stored XSS, zararlı kodun uygulama tarafından veritabanı veya benzeri bir depolama alanında kalıcı olarak saklandığı en tehlikeli XSS türüdür. Saldırgan, zararlı kodu bir kez sisteme enjekte eder ve bu kod daha sonra sayfayı ziyaret eden tüm kullanıcılar için otomatik olarak çalıştırılır.

Forum yorumları, blog mesajları, kullanıcı profilleri ve mesajlaşma alanları Stored XSS için en yaygın hedeflerdir. Kullanıcılar bu içeriği görüntülediklerinde, farkında olmadan zararlı JavaScript kodunu tarayıcılarında çalıştırırlar.

Bu özelliği nedeniyle Stored XSS, tek bir kullanıcıyı değil, potansiyel olarak tüm ziyaretçileri etkileyebilir ve özellikle yönetici hesapları hedef alındığında çok ciddi sonuçlar doğurabilir.

None

3. DOM Tabanlı XSS

DOM tabanlı XSS, saldırının tamamen istemci tarafında, yani kullanıcının tarayıcısında gerçekleştiği bir XSS türüdür. Bu saldırılarda zararlı kod sunucuya hiç ulaşmaz; JavaScript tarafından DOM (Document Object Model) üzerinden işlenir.

Web uygulaması, URL parametreleri veya kullanıcı girdilerini doğrudan DOM içine yazıyorsa ve bu veriler güvenli şekilde işlenmiyorsa, saldırgan zararlı kodu DOM üzerinden enjekte edebilir. Kod yalnızca DOM üzerinde çalıştığı için sunucu loglarında görünmez ve güvenlik duvarları tarafından tespit edilmesi oldukça zordur.

DOM tabanlı XSS genellikle modern JavaScript tabanlı uygulamalarda görülür ve fark edilmesi diğer XSS türlerine göre daha zordur.

None

XSS Güvenlik Açıkları Nasıl Önlenir?

XSS saldırılarına karşı alınabilecek temel önlemler şunlardır:

  • XSS saldırılarına karşı etkili bir koruma sağlamak için, kullanıcıdan gelen hiçbir veriye doğrudan güvenilmemelidir. Tüm girdiler potansiyel olarak zararlı kabul edilmeli ve bu varsayıma göre işlenmelidir.
  • Kullanıcıdan alınan veriler ekrana yansıtılırken, bulundukları bağlama uygun şekilde encode edilmelidir. HTML, JavaScript ve URL bağlamları için doğru encoding kullanımı, zararlı kodların tarayıcı tarafından çalıştırılmasını engeller.
  • Uygulamanın HTML içeriği kabul etmesi gereken durumlarda, rastgele filtreler veya regex yerine güvenilir HTML sanitizer kütüphaneleri tercih edilmelidir. Bu kütüphaneler yalnızca güvenli etiketlere izin vererek XSS riskini azaltır.
  • Oturum yönetiminde kullanılan çerezler için HttpOnly ve Secure bayraklarının etkinleştirilmesi, JavaScript üzerinden çerez erişimini engeller ve olası bir XSS açığının etkisini önemli ölçüde sınırlar.
  • Tarayıcı seviyesinde ek bir savunma katmanı sağlamak amacıyla Content Security Policy (CSP) uygulanmalıdır. CSP, yalnızca belirlenen kaynaklardan script çalıştırılmasına izin vererek XSS payload'larının çalışmasını önleyebilir.
  • Son olarak, web uygulamaları düzenli olarak güvenlik testlerine ve taramalara tabi tutulmalıdır. Kod değişiklikleri ve yeni özellikler, fark edilmeden yeni XSS açıklarının ortaya çıkmasına neden olabileceğinden, süreklilik arz eden test süreçleri kritik öneme sahiptir.
  • Güvenlik testlerini ve taramalarını düzenli olarak yapın