Kontrol Session Management yang Perlu Diverifikasi Sebelum Rilis
Transisi state dan penutupan replay
Gambarkan siklus hidup sesi dari kunjungan anonim melalui login, step-up, elevasi role, reset password, penggantian faktor, logout, idle timeout, dan absolute timeout. Identifikasi pembuatan secret sesi, record server, transport browser atau klien, rotasi, dan store pencabutan. Cookie Secure, HttpOnly, serta SameSite yang dipilih sengaja membantu transport browser; atribut itu tidak membatalkan secret yang disalin tanpa state server.
Jalankan uji replay memakai sesi terpisah. Setelah reset password, putar ulang cookie yang diterbitkan sebelum reset; setelah elevasi role, putar ulang identifier pra-elevasi; setelah logout, ulangi request terautentikasi; setelah timeout, kirim request pada batas clock terkontrol. Output yang diharapkan menggabungkan penolakan, tidak ada state terlindungi, dan record pencabutan. Periksa URL, referrer, riwayat browser, serta log untuk secret sesi karena transport query string dapat bocor di luar storage klien.
Perbaikan memusatkan penerbitan dan pencabutan, memutar identifier setelah perubahan autentikasi, serta menjadikan cek expiry otoritatif di server. Aplikasi native membutuhkan protected storage dan kontrol proof-of-possession ekuivalen saat cookie tidak dipakai. Pengecualian support harus menentukan aksi recovery dan perilaku pembatalan sesi secara tepat. Uji penutup memastikan secret lama gagal sementara sesi terkini hanya dapat dipakai pada kondisi yang dimaksud kebijakan.
Konkurensi mengubah perilaku yang diharapkan. Logout pada satu perangkat dapat mencabut semua sesi atau hanya satu sesi sesuai kebijakan; uji record perangkat dan replay request. Rotasi tidak boleh menciptakan jendela ketika identifier lama dan baru bekerja tanpa batas. Saat perlindungan browser memakai SameSite, uji flow login atau return pembayaran lintas situs yang dimaksud, bukan melemahkannya secara global. Catat waktu server dan sumber expiry karena clock klien tidak dapat dipercaya sebagai otoritas pencabutan.
Membuat dan mengikat sesi
Petakan pembuatan sesi dari state browser anonim ke record terautentikasi. Server membuat identifier tak dapat diprediksi, mengaitkannya dengan subjek dan assurance, lalu mengirimnya hanya melalui transport terpilih. Untuk cookie browser, kumpulkan atribut Secure, HttpOnly, SameSite, domain, path, dan expiry dari respons nyata. Atribut cookie mengurangi paparan browser; lookup serta pencabutan server memutuskan apakah identifier yang disalin masih bekerja. Jangan menaruh secret sesi pada URL, fragment, referrer, payload analytics, atau log aplikasi.
Uji session fixation sebelum login. Kirim identifier pra-autentikasi pilihan, autentikasi, lalu buktikan ada secret terautentikasi berbeda dan nilai pilihan tidak dapat mengakses akun. Ulangi setelah step-up dan elevasi role. Hasil yang diharapkan mencakup identifier baru, penolakan identifier lama, kontinuitas sesi kini, serta event audit bila desain memerlukannya. Domain cookie harus sesempit deployment memungkinkan; uji asumsi subdomain sebelum memakai cookie parent-domain.
Rotasi, logout, dan konkurensi
Gunakan dua perangkat dan dua tab browser. Logout satu perangkat lalu verifikasi apakah policy mencabut perangkat itu saja atau semua sesi; periksa record server serta request replay keduanya. Mulai operasi terautentikasi berumur panjang, kemudian reset password atau hapus faktor MFA. Sebelum penulisan akhir, operasi harus memeriksa ulang otoritas sesi agar pencabutan tidak berpacu dengan commit. Kanal WebSocket dan streaming memerlukan sinyal pencabutan atau reautentikasi terbatas, bukan akses permanen dari cek saat koneksi.
Logout menghapus cookie klien dan membatalkan record server. Uji logout berulang, navigasi tombol kembali, replay cookie lama, serta kegagalan provider atau cache. Sesi tidak dikenal tidak boleh diterima sebagai fallback saat outage. Simpan header respons, hasil store pencabutan, ID korelasi request, jumlah perangkat terdampak, dan hasil API setelah logout.
Expiry idle dan absolut
Tetapkan waktu server terkontrol untuk menguji expiry inaktivitas dan expiry absolut secara terpisah. Aktivitas dapat memperbarui timer idle bila policy mengizinkan, tetapi tidak boleh memperpanjang lifetime absolut tanpa akhir. Uji refresh latar belakang dan banyak tab agar satu request tersembunyi tidak mempertahankan sesi tanpa sengaja. Reautentikasi aksi sensitif membutuhkan bukti terbaru terikat pada sesi kini dan masa berlaku pendek. Perbaiki dengan memusatkan penerbitan, rotasi, pencabutan, cek expiry, dan audit. Pengecualian recovery support menyebut scope tepat, verifikasi wajib, serta hasil pembatalan sesi. Penutupan membuktikan secret sebelum event gagal setelah reset password, penggantian faktor, penghapusan role, logout, dan expiry sementara sesi kini yang berwenang mengikuti policy.
Review pengiriman cookie
Periksa header Set-Cookie nyata melalui setiap route login dan renewal, termasuk jalur error. Pastikan transport aman, perilaku HttpOnly, mode SameSite yang dimaksud, domain serta path sempit, dan expiry konsisten dengan record server. Uji flow return lintas situs secara sengaja, bukan melemahkan mode cookie secara global. Penghapusan cookie harus cocok dengan path dan domain semula atau browser dapat mempertahankan nilai lama. Bukti memasangkan capture header dengan hasil pencabutan server serta test replay.
Matriks replay transisi sesi
| Transisi dan replay | Owner | Bukti | Hasil yang diharapkan | Hasil teramati / status | Pengecualian | Penutupan |
|---|---|---|---|---|---|---|
| Reset password; replay cookie pra-reset dari Perangkat B | Owner platform sesi | Capture SM-233; entri store pencabutan; respons API terlindungi | Cookie lama ditolak; tanpa state terlindungi; sesi pasca-reset mengikuti policy | 401; write terlindungi 0; 2 record pra-reset dicabut — ditutup | Tidak ada | Retest logout, penghapusan faktor, batas idle, dan expiry absolut lulus 2026-06-17 |