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

Zafiyetli
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
}
Güvenli
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

Güncellendi 2026-10-11