Siteler Arası İstek Sahteciliği (CSRF) Nedir?
Siteler arası istek sahteciliği (CSRF, cross-site request forgery), saldırganın kötü amaçlı bir siteden kullanıcının tarayıcısına hedef siteye istek gönderttiği ve sunucunun bu isteği kullanıcının kendi isteği sanarak işlediği saldırıdır.
Diğer Adları: CSRF, Cross-Site Request Forgery
Siteler Arası İstek Sahteciliği Nasıl Gerçekleşir?
MDN’nin tanımıyla saldırgan, kullanıcının tarayıcısını kötü amaçlı bir siteden hedef siteye HTTP isteği göndermeye kandırır. İstek kullanıcının kimlik bilgilerini taşıdığı için sunucu zararlı işlemi kullanıcının istediğini düşünerek yapar.
MDN’ye göre saldırı, sitenin şu üç şeyi yaptığı durumda mümkündür:
- Sunucudaki bir durumu değiştirmek için HTTP isteği kullanması.
- İsteğin oturum açmış kullanıcıdan geldiğini yalnızca çerezlerle doğrulaması.
- İstekte yalnızca saldırganın tahmin edebileceği parametreler kullanması.
Siteler Arası İstek Sahteciliğine Karşı Önlemler
MDN üç savunma sayar: isteğe saldırganın bilemeyeceği bir değer ekleyen CSRF belirteçleri, belirli siteler arası istekleri engellemek için tarayıcının gönderdiği istek bilgilerinin (fetch metadata) kullanılması ve hassas istekleri doğrulayan çerezlere SameSite özniteliğinin verilmesi. Yönetim paneli işlemleri, adres, parola ya da e-posta değiştirme ve sipariş iptali gibi istekler bu önlemlerle korunur.
Siteler Arası İstek Sahteciliği Korumasında Webhook İstisnası
Web çatıları çoğu zaman her POST isteğinde CSRF belirteci arar. Stripe, bu korumanın ödeme kuruluşundan gelen meşru webhook bildirimlerini de engelleyebileceğini, bu durumda webhook adresinin CSRF korumasından muaf tutulması gerekebileceğini belirtir. Muaf tutulan adres korumasız kalmaz: bildirimin gerçekten sağlayıcıdan geldiği imza doğrulamasıyla denetlenir.
Örnek: Bir mağaza panelinde ürün fiyatını güncelleyen istek yalnızca oturum çereziyle doğrulanır. Yönetici panelde oturumu açıkken saldırganın hazırladığı bir sayfayı ziyaret eder ve sayfa arka planda fiyat güncelleme isteği gönderir. İstekte CSRF belirteci zorunlu kılındığında, belirteci bilmeyen saldırganın isteği reddedilir.
Siteler Arası İstek Sahteciliği Hakkında Sık Sorulan Sorular
CSRF ile XSS arasındaki fark nedir?
XSS’te saldırganın kodu hedef sitenin sayfasında çalışır. CSRF’te ise kod başka bir sitede kalır ve yalnızca kullanıcının tarayıcısına hedef siteye istenmeyen bir istek gönderttirir.
CORS ayarı CSRF’e karşı korur mu?
Tek başına korumaz. CORS, başka kökenden çalışan kodun yanıtı okuyup okuyamayacağını belirler; isteğin sunucuya ulaşmasını her zaman engellemez. CSRF için belirteç ve SameSite gibi ayrı önlemler gerekir.
Hazır altyapılarda CSRF koruması kendiliğinden gelir mi?
Stripe’ın belirttiği gibi Rails ve Django gibi web çatıları POST isteklerinde CSRF belirtecini kendiliğinden denetleyebilir. Temaya ya da panele sonradan eklenen özel formlar ve eklentiler ise bu korumanın dışında kalabilir ve ayrıca denetlenir.