Back to IF5161 Keamanan Data dan Perangkat Lunak

Session Management dan Token-Based Authentication

Questions/Cues

  • Bagaimana struktur JWT dan apa kesalahan implementasinya?
  • Apa saja pengaturan penting cookie sesi?
  • Seperti apa konfigurasi sesi yang rentan vs aman?
  • Serangan apa yang dimungkinkan oleh sesi yang lemah?

Reference Points

  • IF5161 — W05 Identity, Authentication, and Authorization, bagian “Token-Based Auth”, “Session Management”, “Mistake 3: JWT Implementation Errors”, “Mistake 7: Session Security Failures”

Token-Based Authentication (JWT)

JWT terdiri dari tiga bagian: Header.Payload.Signature. Header menyatakan algoritma, payload berisi klaim (sub, iss, aud, exp, …), dan signature menjamin integritas. Praktik terbaik: selalu validasi signature, algoritma, dan klaim, dan jangan menyimpan data sensitif di payload karena hanya di-encode (Base64), bukan dienkripsi.

Kesalahan implementasi JWT yang lazim: menerima alg: none, tidak memverifikasi signature, mengabaikan exp/aud/iss, memakai secret lemah, dan tidak menyediakan rotasi serta revokasi token.

Secure Session Handling

PengaturanFungsi
HttpOnlyMencegah pencurian cookie oleh skrip (XSS)
SecureCookie hanya dikirim lewat HTTPS
SameSitePerlindungan CSRF
Expiration pendek + rotasiMembatasi jendela penyalahgunaan

Kode Rentan vs Aman

Versi rentan menyetel cookie session_id tanpa flag keamanan dan max_age=31536000 (satu tahun). Akibatnya: (1) XSS mencuri cookie (tanpa HttpOnly), (2) MITM menyadap di HTTP (tanpa Secure), (3) CSRF dari situs lain (SameSite=None), (4) sesi berumur panjang menaikkan risiko.

Konfigurasi aman: HttpOnly=True, Secure=True, SameSite='Strict', max_age=1800 (30 menit).

flowchart LR
    L["Login sukses"] --> N["Generate session ID baru<br/>(acak, kuat)"]
    N --> C["Set cookie:<br/>HttpOnly, Secure, SameSite, umur pendek"]
    C --> R["Request: validasi di server"]
    R --> X["Logout / idle timeout:<br/>hancurkan sesi di server"]

Konsep ini sejalan dengan temuan lama di Broken Authentication, IDOR, dan URL Access Control dan pertahanan CSRF di CSRF dan Client-Side State Manipulation.

Summary

JWT (header.payload.signature) harus divalidasi penuh (signature, algoritma, klaim) dan tidak boleh memuat data sensitif. Cookie sesi wajib HttpOnly, Secure, SameSite dengan umur pendek dan rotasi. Sesi tanpa flag dan berumur setahun membuka XSS theft, MITM, CSRF, dan penyalahgunaan jangka panjang.