Session Management — Security

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

Session adalah cara server mengingat siapa kamu di antara request. HTTP itu stateless: tiap request berdiri sendiri, server tidak otomatis tahu request ini datang dari orang yang tadi login. Bayangin penitipan jaket di kafe. Kamu titip jaket, dikasih tiket bernomor. Tiap kali mau ambil, kamu tunjukkan tiketnya, dan petugas tahu jaket mana milikmu dari nomor itu. Session ID adalah tiket itu, dan dia dititipkan di browser lewat cookie.

🧪 Tebakan cepat: login berhasil, tapi session ID-nya tetap sama persis seperti sebelum login. Serangan apa yang jadi terbuka? Tebak dulu, jawabannya ada di bagian "Fixation di Lab".

Session: tiket di antara request

Alurnya:

Yang disimpan di cookie cuma nomor tiketnya (session ID), bukan data penting. Data aslinya ada di server.

Dua ancaman: hijacking dan fixation

Fixation di Lab

Di Lab ada alur login dengan penyimpanan session di server. Penyerang sudah menanam session ID abc123 dan tahu nilainya. Lalu korban login. Ada satu saklar: regenerate session ID saat login.

regenerate Session ID setelah login Akibat
mati tetap abc123 ID itu kini terikat ke akun korban, dan penyerang sudah tahu abc123. Penyerang ikut masuk.
nyala diganti jadi nilai acak baru abc123 milik penyerang jadi tidak berguna, karena akun korban kini pakai ID lain.

Jadi jawaban tebakannya: kalau session ID tidak berganti setelah login, yang terbuka adalah session fixation. Kuncinya: jangan biarkan korban login memakai session ID yang sudah ada di tangan orang lain.

Perbaikan: regenerate session ID

Selalu buat session ID baru tepat setelah login berhasil:

// PHP: bikin session ID baru, hapus yang lama
session_regenerate_id(true);
$_SESSION["userId"] = $user->id;

Session ID juga perlu dilindungi dari pencurian, dengan flag cookie:

(Flag cookie dibahas lebih dalam di pelajaran Cookie Security.)

Checklist session aman

⚠️ Jebakan yang sering ketemu

TL;DR: Session membuat HTTP yang stateless bisa mengingat siapa kamu, lewat session ID (tiket) yang dititipkan di cookie dan datanya disimpan di server. Dua ancaman: session hijacking (ID dicuri) dan session fixation (ID yang sudah diketahui penyerang dipakai korban login). Perbaikan utama: session_regenerate_id(true) tepat setelah login, plus cookie HttpOnly, Secure, SameSite, timeout, dan invalidate saat logout. Session ID harus acak dan panjang, dan datanya disimpan di server.

Yang akan kamu pelajari