Keamanan Sesi
Pelajari bagaimana aplikasi mengingat pengguna yang sudah login, risiko pembajakan sesi, dan praktik pengelolaan sesi serta cookie yang aman.
Tujuan Pembelajaran
- Menjelaskan fungsi sesi dan pengenal sesi pada aplikasi web
- Memahami risiko pembajakan sesi dan session fixation secara konseptual
- Mengonfigurasi cookie sesi dengan flag keamanan yang tepat
- Menerapkan masa berlaku, rotasi, dan pengakhiran sesi yang benar
01Mengapa sesi dibutuhkan
HTTP bersifat tanpa status: setiap permintaan berdiri sendiri. Agar pengguna tidak perlu login pada setiap halaman, server membuat sesi setelah autentikasi berhasil dan memberi browser sebuah pengenal sesi, biasanya disimpan dalam cookie.
Pengenal sesi pada dasarnya berfungsi seperti tiket masuk. Siapa pun yang memegang tiket valid dianggap sebagai pengguna tersebut, sehingga tiket itu harus acak, sulit ditebak, dan terlindungi.
02Risiko terhadap sesi
Ancaman utama berpusat pada pengenal sesi yang bocor, dapat ditebak, atau dapat dipaksakan.
- Pembajakan sesi: pengenal sesi valid milik pengguna diperoleh pihak lain, misalnya lewat XSS, jaringan tidak aman, atau perangkat bersama
- Session fixation: pengguna dipaksa memakai pengenal sesi yang sudah diketahui pihak lain sebelum login
- CSRF: browser pengguna dimanfaatkan untuk mengirim permintaan yang tidak dikehendaki saat sesi aktif
- Pengenal sesi lemah: nilai berurutan atau terlalu pendek sehingga dapat ditebak
03Mengamankan cookie sesi
Atribut cookie adalah kontrol murah dengan manfaat besar.
- HttpOnly: cookie tidak dapat dibaca oleh JavaScript sehingga lebih sulit dicuri lewat XSS
- Secure: cookie hanya dikirim melalui HTTPS
- SameSite (Lax atau Strict): membatasi pengiriman cookie pada permintaan lintas situs sehingga mengurangi CSRF
- Gunakan awalan nama __Host- bila memungkinkan dan batasi cakupan domain serta path
- Pengenal sesi dihasilkan oleh generator acak yang aman secara kriptografis
04Siklus hidup sesi
Buat pengenal sesi baru setiap kali pengguna login atau naik tingkat hak akses, sehingga session fixation tidak berhasil. Terapkan batas waktu menganggur dan batas waktu absolut, lebih pendek untuk aplikasi sensitif.
Saat logout, hapus sesi di server, bukan hanya cookie di browser. Berikan fitur untuk melihat dan mengakhiri sesi di perangkat lain, dan akhiri semua sesi ketika kata sandi diganti. Tambahkan token anti-CSRF pada tindakan yang mengubah data.
Contoh Praktis (Aman)
Konfigurasi sesi aman di ExpressContoh defensif memakai express-session. Perhatikan flag cookie, masa berlaku, dan regenerasi sesi setelah login.
import session from 'express-session';
app.use(session({
name: '__Host-sid',
secret: process.env.SESSION_SECRET, // rahasia kuat dari environment
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: true,
secure: true,
sameSite: 'lax',
maxAge: 30 * 60 * 1000 // 30 menit
}
}));
// Setelah login berhasil: buat pengenal sesi baru
req.session.regenerate((err) => {
if (err) return next(err);
req.session.userId = user.id;
res.redirect('/dashboard');
});Rangkuman
- Pengenal sesi berfungsi seperti tiket, sehingga harus acak, rahasia, dan terlindungi
- Ancaman utama: pembajakan sesi, session fixation, dan CSRF
- Gunakan cookie HttpOnly, Secure, dan SameSite serta generator acak yang aman
- Regenerasi sesi saat login, terapkan batas waktu, dan hancurkan sesi di server saat logout
Mini Quiz
Pilih satu jawaban untuk setiap soal, lalu tekan "Periksa Jawaban".
Apa fungsi atribut HttpOnly pada cookie sesi?
Mengapa pengenal sesi baru perlu dibuat setelah login?
Apa yang sebaiknya dilakukan saat pengguna logout?