Ana içeriğe geç

XSS

Siteler Arası Betik Çalıştırma (Cross-Site Scripting)

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/xss

Kısaca

XSS, saldırganın güvenilir bir siteye kötü amaçlı JavaScript enjekte edip bu kodu diğer kullanıcıların tarayıcısında çalıştırmasına yol açan zafiyettir.

XSS nedir?

Cross-site scripting, bir web uygulamasının yorum, arama terimi ya da URL parametresi gibi güvenilmeyen verileri önce güvenli hâle getirmeden sayfaya eklemesiyle ortaya çıkar. Tarayıcı, saldırganın betiğini sitenin kendi kodundan ayıramaz ve onu gerçek sitenin sahip olduğu izinlerle çalıştırır.

Betik çalışmaya başladığında sayfadaki verileri okuyabilir, oturum açmış kullanıcı gibi davranabilir, kullanıcının gördüklerini değiştirebilir ya da saldırgana bilgi gönderebilir. XSS üç ana biçimde görülür: yükün veritabanına kaydedilip her ziyaretçiye gösterildiği stored XSS, arama URL'si gibi bir istekten yansıtıldığı reflected XSS ve ön yüz JavaScript'inin güvenilmeyen veriyi sayfaya eklediği DOM-based XSS.

Temel savunma çıktı kodlamasıdır (output encoding): < ve > gibi özel karakterleri, veri HTML'e eklenmeden önce zararsız metne dönüştürmek. React, Vue ve Angular gibi framework'ler bunu varsayılan olarak yapar. Kullanıcı verisiyle innerHTML veya dangerouslySetInnerHTML gibi ham HTML alıcılarından kaçının, izin vermeniz gereken HTML'i iyi test edilmiş bir sanitizer kütüphanesiyle temizleyin ve hangi betiklerin çalışabileceğini kısıtlayan bir Content Security Policy (CSP) başlığı ekleyin. Oturum çerezlerini HttpOnly olarak işaretlemek, çerezleri betiklerin erişiminden uzak tutarak zararı sınırlar.

XSS sıklıkla CSRF ile karıştırılır. XSS'te saldırganın kodu güvenilir sitenin içinde çalışır; CSRF'te ise saldırganın kendi sitesi tarayıcıyı, güvenilir siteye istek göndermesi için kandırır. Bir XSS açığı, çoğu CSRF savunmasını da işlevsiz bırakabilir.

Bir bakışta

Saklanan XSS: saldırgan içinde script olan bir yorum gönderir, site onu kaydedip sayfaya olduğu gibi koyar ve her ziyaretçinin tarayıcısı onu sitenin kendi kodu sanıp çalıştırarak çerezini saldırgana yollar.<script>steal(cookie)</script>Saldırganbir yorum gönderirWeb sitesikaydeder, olduğu gibi gösteriryorumlu sayfaZiyaretçinin tarayıcısısitenin kodu sanıp çalıştırırçerezi saldırgana giderÇözüm: çıktıda kodla. <script>, &lt;script&gt; olur ve metin olarak görünür.
Çözüm, güvenilmeyen veriyi çıktıda kodlamaktır: aynı yorum o zaman çalışmak yerine zararsız bir metin olarak görünür.

Önemli noktalar

  • XSS, saldırganın sağladığı betiklerin diğer kullanıcıların tarayıcısında çalışmasına izin verir.
  • Güvenilmeyen verinin kodlanmadan sayfalara eklenmesinden kaynaklanır.
  • Üç ana türü stored, reflected ve DOM-based XSS'tir.
  • Çıktı kodlaması, güvenli DOM API'leri, sanitization ve CSP ile savunun.
  • HttpOnly çerezler, başarılı bir saldırının etkisini azaltır.

Örnek

Kullanıcı girdisini göstermenin savunmasız ve güvenli yolujavascript
const comment = getCommentFromUser(); // e.g. <img src=x onerror=alert(1)>

// Vulnerable: the browser parses the text as HTML and runs the script
commentBox.innerHTML = comment;

// Safe: the input is treated as plain text, never as HTML
commentBox.textContent = comment;

Sık sorulan sorular

XSS ile CSRF arasındaki fark nedir?

XSS, güvenilir bir web sitesine kötü amaçlı betik enjekte eder ve bu betik kurbanların tarayıcısında çalışır. CSRF ise kurbanın tarayıcısını, oturum açtığı bir siteye istenmeyen bir istek göndermesi için kandırır; o sitede herhangi bir kod çalıştırmaz.

React, XSS'i engeller mi?

React, JSX ile eklenen değerleri varsayılan olarak escape eder ve bu, en yaygın XSS durumlarını engeller. Yine de dangerouslySetInnerHTML, javascript: URL'leri gibi güvensiz href değerleri ya da güvenilmeyen üçüncü taraf kodlarla zafiyet oluşturabilirsiniz.

Content Security Policy nedir?

Content Security Policy, tarayıcıya hangi betik, stil ve diğer kaynakların yüklenebileceğini söyleyen bir HTTP yanıt başlığıdır. Sıkı bir politika, XSS açığı olsa bile enjekte edilen betiklerin çalışmasını engelleyebilir.

Sık karşılaştırılanlar

İlgili sayfalar

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar