Güvenli oturum cookie'leri: bayraklar ve giriş adımı
Oturum cookie'si hesabın ta kendisidir. Üç bayrak onu kimin okuyabileceğine ve ne zaman gönderileceğine karar verir; girişteki bir satır da başka birinin onu paylaşıp paylaşamayacağına.
Örnek
app.use(session({
secret: process.env.SESSION_SECRET,
cookie: { httpOnly: false },
}));
function login(req, res, user) {
req.session.userId = user.id; // same session id as before login
}app.set("trust proxy", 1);
app.use(session({
secret: process.env.SESSION_SECRET,
cookie: { secure: true, httpOnly: true, sameSite: "lax", maxAge: 8 * 3600 * 1000 },
}));
function login(req, res, user) {
req.session.regenerate(() => { req.session.userId = user.id; res.redirect("/"); });
}Nasıl ters gider
Secure olmadan cookie düz HTTP üzerinden de gider; orada ağdaki herkes okuyabilir. HttpOnly olmadan enjekte edilen tek bir script onu okuyup dışarı gönderebilir. SameSite olmadan başka sitelerin formları onu da taşır. Oturum ID'si girişte değiştirilmezse, girişten önce yerleştirilen bir ID girişten sonra da geçerli kalır — session fixation.
Nasıl düzeltilir
Bayrakları açıkça ayarla; varsayılanlara güvenme.
- HTTPS bir sitenin her cookie'sinde Secure (proxy arkasındaysa Express'in bilmesi için proxy'ye güven)
- Oturum ve kimlik doğrulama cookie'lerinde HttpOnly
- Oturum cookie'lerinde SameSite=Lax veya Strict
- Girişte oturumu yenile, çıkışta yok et
RepoVerse bunu nasıl bulur
- OrtaOturum cookie'si düz HTTP üzerinden gönderilebilir
`secure` olmadan oturum cookie'si her HTTP isteğinde gider ve ağda okunabilir. (express-session HttpOnly'yi varsayılan olarak açar; Secure'u açmaz.)
veri akışı · CWE-614
- YüksekOturum cookie'si sayfa script'leri tarafından okunabiliyor
`httpOnly: false`, enjekte edilen herhangi bir script'in oturum cookie'sini okuyup hesabı ele geçirmesine izin verir.
veri akışı · CWE-1004
- OrtaGirişte oturum yenilenmiyor
Giriş öncesi yerleştirilmiş bir oturum ID'si girişten sonra da geçerli kalır; onu yerleştiren kişi giriş yapılmış oturumu paylaşır.
veri akışı · CWE-384
- OrtaÇerez koruyucu bayrakları olmadan ayarlanmış
`httpOnly` olmayan bir oturum çerezi script tarafından okunabilir; `secure` olmayan ise düz HTTP üzerinden gider.
örüntü · CWE-1004
- OrtaCookie Secure bayrağı olmadan ayarlanmış
Tarayıcı bu cookie'yi düz HTTP üzerinden de gönderir; orada ağdaki herkes okuyabilir.
web sitesi · CWE-614
- OrtaOturum cookie'si sayfa script'leri tarafından okunabiliyor
`HttpOnly` olmadan enjekte edilen tek bir script oturum cookie'sini okuyup dışarı gönderebilir ve giriş yapılmış hesabı ele geçirir.
web sitesi · CWE-1004
Sorular
- express-session varsayılan olarak HttpOnly ayarlar mı?
- Evet, express-session'ın cookie'si varsayılan olarak HttpOnly'dir ama Secure değildir. httpOnly: false ayarlamak veya Secure'u ayarlamamak ikisi de raporlanır.
- CSRF cookie'leri HttpOnly olmalı mı?
- Hayır. Django ve Angular gibi framework'ler CSRF cookie'sini bilerek JavaScript'ten okur; bu yüzden RepoVerse csrftoken veya XSRF-TOKEN cookie'lerinde HttpOnly istemez.
İlgili
- CSRF: kullanıcılarının hiç göndermek istemediği isteklerCSRF (CWE-352) giriş yapmış bir ziyaretçinin tarayıcısına sitene nasıl form gönderttirir; CSRF token'ları ve SameSite cookie'leri bunu nasıl durdurur.
- Siteler arası betik (XSS): nasıl çalışır, nasıl durdurulurYansıtılan, kalıcı ve DOM tabanlı XSS (CWE-79), zafiyetli ve düzeltilmiş kodla; ayrıca hasarı sınırlayan şablon, CSP ve cookie ayarları.
- HTTPS ve HSTS: düz HTTP açığını kapatmakHer site neden HTTPS'e, HTTP'den 301 yönlendirmesine ve Strict-Transport-Security header'ına (CWE-319) ihtiyaç duyar; doğru max-age ve karışık içerik.
Güncellendi 2026-10-11