CSRF
Siteler Arası İstek Sahteciliği (Cross-Site Request Forgery)
- Okunuşu
- sisörf ya da si-es-ar-ef
Kısaca
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 nedir?
Cross-site request forgery, tarayıcıların çerezleri isteklere otomatik olarak eklemesinden yararlanır. Bankanızda oturum açmışken kötü amaçlı bir sayfayı ziyaret ederseniz, bu sayfa arka planda bankaya bir form gönderebilir; tarayıcınız oturum çerezinizi isteğe ekler ve banka, sizden gelmiş meşru bir istek görür.
Saldırgan yanıtı asla görmez ve parolanızı öğrenmez; yalnızca sitenin e-posta adresini değiştirmek, para transfer etmek veya veri silmek gibi bir eylemi gerçekleştirmesini sağlar. CSRF'in yalnızca veri okuyan isteklere değil, durumu değiştiren isteklere odaklanmasının nedeni budur.
Başlıca savunmalar anti-CSRF token'ları ve SameSite çerezleridir. CSRF token'ı, sunucunun kendi formlarına gömdüğü ve durumu değiştiren her istekte doğruladığı, rastgele ve tahmin edilemez bir değerdir; üçüncü taraf bir site bunu bilemez. Oturum çerezlerini SameSite=Lax veya SameSite=Strict olarak ayarlamak, tarayıcıların çerezleri çoğu siteler arası istekte göndermesini engeller; Origin başlığını kontrol etmek ise bir katman daha ekler.
GET isteklerinin yan etkisiz tutulması da önemlidir; çünkü bağlantılar ve görseller bu istekleri her yerden tetikleyebilir. Çerez yerine Authorization başlığında token ile kimlik doğrulayan API'ler, tarayıcılar bu başlığı asla otomatik eklemediği için genellikle CSRF'e açık değildir. CSRF, XSS'ten farklıdır: CSRF başka bir siteden sahte istek gönderir, XSS ise saldırganın kodunu hedef sitenin içinde çalıştırır.
Bir bakışta
Önemli noktalar
- CSRF, tarayıcıların otomatik gönderdiği çerezlerden yararlanır.
- Veri okumayı değil, durumu değiştiren eylemleri hedefler.
- Anti-CSRF token'ları, isteğin gerçek sitenin kendi sayfalarından geldiğini kanıtlar.
SameSiteçerezler, siteler arası çerez gönderiminin çoğunu engeller.GETistekleri asla veriyi değiştirmemelidir.
Örnek
// Vulnerable: any website can submit this form on the user's behalf
app.post("/email", requireLogin, (req, res) => {
updateEmail(req.user, req.body.email);
res.sendStatus(204);
});
// Protected: require a secret token that only our own form contains
app.post("/email", requireLogin, (req, res) => {
if (req.body.csrfToken !== req.session.csrfToken) {
return res.status(403).send("Invalid CSRF token");
}
updateEmail(req.user, req.body.email);
res.sendStatus(204);
});Sık sorulan sorular
CSRF ile XSS arasındaki fark nedir?
CSRF, kullanıcının tarayıcısının farklı ve kötü amaçlı bir siteden güvenilir bir siteye istek göndermesini sağlar; XSS ise betiği güvenilir sitenin içinde çalıştırır. Enjekte edilen betik çoğu CSRF korumasını aşabileceğinden XSS genellikle daha tehlikelidir.
SameSite çerezleri CSRF'i engeller mi?
SameSite=Lax veya SameSite=Strict, çerezleri siteler arası isteklerde göndermeyerek çoğu CSRF saldırısını engeller; bazı tarayıcılar bu özniteliği olmayan çerezleri varsayılan olarak Lax sayar. Yine de derinlemesine savunma için CSRF token'ları ya da Origin kontrolleriyle birlikte kullanılması önerilir.
JWT tabanlı API'lerin CSRF korumasına ihtiyacı var mı?
Token bir çerezde saklanıyorsa evet; çünkü tarayıcı onu otomatik gönderir. Token bir Authorization başlığında elle gönderiliyorsa CSRF genellikle sorun olmaz, ancak bu durumda token'ın XSS'e karşı korunması gerekir.
Sık karşılaştırılanlar
İlgili sayfalar
- XSSGüvenlik, s. 47XSS, 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.
- CookieWeb Geliştirme, s. 7Cookie, bir web sitesinin tarayıcıdan saklamasını ve sonraki isteklerle geri göndermesini istediği, çoğunlukla oturum açık tutmak için kullanılan küçük veridir.
- JWTGüvenlik, s. 17JWT, kullanıcı kimliği ve son kullanma zamanı gibi bilgileri taşıyan, imzalı ve kompakt bir token'dır; sunucunun oturum aramadan istekleri doğrulamasını sağlar.
- HTTPWeb Geliştirme, s. 20HTTP, tarayıcıların, uygulamaların ve sunucuların basit bir istek-yanıt döngüsüyle web sayfaları ve veri alışverişi yapmasını sağlayan protokoldür.
- CORSWeb Geliştirme, s. 9CORS, bir sunucunun JavaScript'ten istek yapan hangi diğer sitelerin yanıtlarını okuyabileceğini bildirmesini sağlayan tarayıcı güvenlik mekanizmasıdır.
- MiddlewareBackend ve API'ler, s. 29Middleware, bir sistemin iki katmanı arasında duran yazılımdır; bir web sunucusunda çoğunlukla gelen istek ile son yanıt arasında çalışan koddur.
- SSRFGüvenlik, s. 41SSRF, bir saldırganın sunucuyu kendi seçtiği bir hedefe istek göndermeye zorladığı ve çoğu zaman erişemeyeceği iç sistemlere ulaşabildiği bir zafiyettir.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin