CSRF: kullanıcılarının hiç göndermek istemediği istekler
Siteler arası istek sahteciliği tarayıcıların cookie'leri otomatik eklemesini kötüye kullanır. Başka bir site, giriş yapmış bir ziyaretçinin tarayıcısına seninkine form gönderttirebilir ve oturum cookie'si de onunla gider.
Örnek
app.use(session({ secret: process.env.SESSION_SECRET }));
app.post("/transfer", isLoggedIn, (req, res) => {
transfer(req.session.userId, req.body.to, req.body.amount);
res.redirect("/account");
});app.use(session({
secret: process.env.SESSION_SECRET,
cookie: { secure: true, httpOnly: true, sameSite: "lax" },
}));
app.use(doubleCsrfProtection); // csrf-csrf, or lusca.csrf()
app.post("/transfer", isLoggedIn, (req, res) => { /* … */ });Nasıl oluşur
Saldırganın sitesindeki bir sayfa, https://senin-siten.com/transfer adresine gönderim yapan ve yüklenince kendini gönderen bir form içerir. Oturum cookie'n siteler arası isteklerde gönderiliyorsa ve uç nokta geçerli oturum taşıyan her isteği kabul ediyorsa transfer gerçekleşir. CSRF token'ı ve SameSite olmayan cookie oturumları klasik kurulumdur.
Nasıl düzeltilir
Siteler arası bir isteğin gerçek bir istek gibi görünmesini imkânsız kıl.
- Oturum cookie'lerinde SameSite=Lax (veya Strict) ayarla
- Durum değiştiren route'lara CSRF token'ı ekle (csrf-csrf, lusca, framework'ün yerleşikleri)
- GET isteklerinde asla durum değiştirme
- Header'da token ile kimlik doğrulayan API'lerde CSRF geçerli değildir — sorun cookie'lerdir
RepoVerse bunu nasıl bulur
- OrtaCSRF koruması olmayan cookie oturumları
Başka bir site, giriş yapmış kullanıcı adına durum değiştiren route'lara form gönderebilir — tarayıcı oturum cookie'sini kendiliğinden ekler.
veri akışı · CWE-352
- DüşükOturum cookie'sinde SameSite yok
Varsayılanı `Lax` olmayan tarayıcılar cookie'yi siteler arası form gönderimlerine ekler; CSRF saldırısı buna dayanır.
web sitesi · CWE-1275
Sorular
- SameSite=Lax CSRF'yi durdurmaya yeter mi?
- Destekleyen tarayıcılarda siteler arası POST'ları engeller; bu da saldırıların çoğunu kapsar. Eski tarayıcılar ve durum değiştiren üst seviye GET'ler gibi SameSite'ın kapsamadığı akışlar için token'lar yine önerilir.
- RepoVerse eksik CSRF korumasını nasıl tespit ediyor?
- Durum değiştiren route'ları olan, CSRF middleware'i ve SameSite ayarı olmayan cookie tabanlı oturumları arar ve etkilenen route'ları bulguda listeler.
İlgili
- Güvenli oturum cookie'leri: bayraklar ve giriş adımıOturum cookie'lerini güvenle ayarla: Secure, HttpOnly ve SameSite bayrakları (CWE-614, CWE-1004), session fixation'a karşı girişte oturumu yenileme, Express örnekleriyle.
- Clickjacking: görünmez bir frame üzerinden çalınan tıklamalarClickjacking'in (CWE-1021) tıklamaları çalmak için sayfanı görünmez bir frame'de nasıl sakladığı ve bunu önleyen iki header — CSP frame-ancestors ve X-Frame-Options.
- IDOR: başkasının verisini görmek için tek bir sayıyı değiştirmekURL'deki ID'yi değiştirmek başka kullanıcıların verisini nasıl açar (IDOR, BOLA, CWE-639); giriş kontrolü neden sahiplik kontrolü değildir, çözümü.
Güncellendi 2026-10-11