Web Application Security Fundamentals #08: Authentication dan Session Management
Bangun login, recovery, MFA, cookie, session rotation, timeout, logout, dan revocation dengan threat model yang benar.
Authentication memverifikasi identity; session mempertahankan state setelah verifikasi. Authorization menentukan apa yang boleh dilakukan. Mencampur tiga konsep ini menciptakan celah yang sulit terlihat.
Etika dan scope: praktikkan hanya pada local lab, aplikasi milik sendiri, atau sistem yang memberikan izin tertulis. Tutorial ini tidak mengizinkan pengujian terhadap target publik.

Tujuan pembelajaran
- membedakan authentication, session, dan authorization
- mengamankan login dan recovery
- mengatur session ID, cookie, rotation, timeout, logout
- menguji negative path dan revocation
Prasyarat
Gunakan browser modern, Developer Tools, dan local lab. Catat versi tool serta environment ketika menguji. Output contoh bersifat ilustratif kecuali dinyatakan sebagai hasil pengujian; jangan menganggap perilaku satu stack berlaku universal.
1. Lindungi seluruh lifecycle identity
Review registration, login, MFA enrollment, recovery, email change, password change, account linking, logout, dan deletion. Recovery tidak boleh lebih lemah daripada login.
2. Password handling
Gunakan password hashing khusus seperti Argon2id sesuai guidance dan library resmi; jangan menggunakan general-purpose hash cepat. Jangan log password. Izinkan password manager dan paste. Periksa kompromi password bila policy dan privacy memungkinkan.
3. MFA dan reauthentication
MFA mengurangi risiko credential compromise, tetapi enrollment dan reset harus dilindungi. Minta reauthentication untuk perubahan sensitif sesuai risk, misalnya mengganti MFA atau payout account.
4. Session ID
Session ID harus acak, tidak bermakna, dan dianggap untrusted input. Rotasi setelah login dan perubahan privilege untuk mengurangi session fixation. Jangan menaruh session ID pada URL.
Contoh cookie:
Set-Cookie: __Host-session=REDACTED; Path=/; Secure; HttpOnly; SameSite=Lax
Prefix __Host- mensyaratkan Secure, Path=/, dan tanpa Domain. Pilih SameSite berdasarkan alur aplikasi; SameSite=None memerlukan Secure.
5. Timeout dan revocation
Gunakan idle timeout dan absolute timeout sesuai sensitivity. Logout harus mencabut server-side session, bukan hanya menghapus cookie browser. Siapkan revocation untuk password reset, device loss, dan suspected compromise.
6. Token storage
Jangan membuat keputusan universal “JWT selalu lebih aman”. Token stateless menyulitkan immediate revocation dan memperbesar konsekuensi leakage. Pilih session architecture berdasarkan requirement, bukan tren.
7. Rate limiting dan response
Rate limiting harus mempertimbangkan account, IP, device signal, dan abuse pattern tanpa mudah dipakai untuk denial of service terhadap korban. Hindari response yang memudahkan account enumeration.
8. Logging
Catat login success/failure secara proporsional, MFA change, recovery, session revocation, dan privilege change. Jangan mencatat password, OTP, session token, refresh token, atau authorization header.
Kesalahan umum
- Session tetap sama sebelum dan setelah login.
- Logout hanya client-side.
- Reset password tidak mencabut session.
- Cookie tanpa Secure/HttpOnly yang relevan.
- Menyamakan decoding JWT dengan verification.
Quality gate sebelum diterapkan
- [ ] Scope dan asset sudah jelas.
- [ ] Control dijalankan di sisi yang menjadi security boundary.
- [ ] Positive test dan negative test tersedia.
- [ ] Error tidak membocorkan secret atau detail internal.
- [ ] Logging cukup untuk detection tanpa merekam credential.
- [ ] Versi dependency dan dokumentasi dicatat.
- [ ] Tidak ada klaim “100% aman”.
- [ ] Perubahan diuji pada staging atau local lab.
Kesimpulan
Setelah identity dan session, kita mengamankan channel komunikasi. Tutorial berikutnya membahas HTTPS, TLS, dan certificate.
Referensi resmi
- OWASP Top 10:2025 — diakses 22 Agustus 2026.
- OWASP Cheat Sheet Series — diakses 22 Agustus 2026.
- OWASP Web Security Testing Guide — Stable — diakses 22 Agustus 2026.
- MDN Web Security — diakses 22 Agustus 2026.
Post Terkait
Web Application Security Fundamentals #07: Input Validation
Pelajari allowlist, schema validation, canonicalization, server-side validation, dan perbedaannya dari sanitization sert...
Web Application Security Fundamentals #06: Secure SDLC
Masukkan threat modeling, secure design, code review, testing, deployment, monitoring, dan incident learning ke seluruh...
Web Application Security Fundamentals #05: Common Web Attack Vectors
Kenali jalur serangan umum seperti input, identity, session, upload, dependency, dan business logic tanpa menguji target...