Apa Itu Session Hijacking dan Cara Mencegahnya
Session hijacking membuat penyerang masuk ke akun tanpa password dan bahkan melewati 2FA. Kenali cara kerjanya dan pengaturan yang mencegahnya di website.
Jawaban singkat
Session hijacking adalah pencurian tanda sesi login (biasanya cookie) sehingga penyerang bisa memakai akun korban tanpa password. Cegah dengan HTTPS penuh, cookie HttpOnly, Secure, dan SameSite, ID sesi baru setiap login, batas waktu sesi, serta perangkat pengguna yang bebas malware.
Daftar isi
Session hijacking adalah serangan ketika seseorang mencuri tanda sesi login milik orang lain, lalu memakainya untuk masuk ke akun tanpa perlu tahu password.
Ini penting karena banyak pemilik website merasa aman setelah memasang password kuat dan 2FA. Padahal keduanya hanya diperiksa saat login. Setelah itu, website mengenali pengguna dari satu potong data kecil di browser. Kalau data itu berpindah tangan, penyerang langsung berada di dalam, seolah-olah dia adalah kamu.
Bagaimana sesi login bekerja?
HTTP pada dasarnya tidak mengingat siapa yang sedang berkunjung. Supaya kamu tidak diminta login di setiap halaman, server membuat ID sesi acak setelah login berhasil, lalu menitipkannya ke browser dalam bentuk cookie. Setiap kali browser meminta halaman berikutnya, cookie itu ikut terkirim dan server berkata, "Oh, ini pengguna yang tadi."
Artinya, selama sesi masih berlaku, cookie tersebut setara dengan kunci akun. Server tidak menanyakan password lagi, dan tidak menanyakan kode 2FA lagi.
Dari mana penyerang mendapatkan cookie sesi?
Ada beberapa jalur yang paling umum:
- Malware pencuri data di perangkat korban. Infostealer menyalin cookie yang tersimpan di browser, lalu mengirimnya ke penyerang. Karena yang dicuri adalah sesi yang sudah lolos 2FA, penyerang tidak perlu kode OTP. Jenis malware ini dibahas di infostealer pencuri password browser.
- Celah XSS di website. Bila penyerang bisa menyisipkan JavaScript ke halaman, skrip itu bisa membaca cookie yang tidak dilindungi lalu mengirimnya keluar. Contoh kasusnya ada di apa itu XSS di formulir website.
- Koneksi tanpa enkripsi. Di jaringan yang bisa disadap, seperti Wi-Fi publik tanpa pengaman, cookie yang dikirim lewat HTTP biasa bisa terbaca.
- Session fixation. Penyerang "menitipkan" ID sesi yang sudah ia ketahui ke korban, misalnya lewat tautan. Bila aplikasi tidak membuat ID baru saat korban login, penyerang ikut memakai sesi yang sama.
- ID sesi yang mudah ditebak. Aplikasi buatan sendiri yang membuat ID dari angka urut atau waktu bisa ditebak dengan mencoba-coba.
Pengaturan yang mencegahnya di sisi website
Kebanyakan pencegahan session hijacking adalah soal konfigurasi, bukan fitur mahal. Ringkasannya:
| Jalur serangan | Pencegahan utama |
|---|---|
| Penyadapan koneksi | HTTPS di semua halaman, HSTS, atribut cookie Secure |
| Pencurian lewat XSS | Atribut HttpOnly, perbaikan celah XSS, Content Security Policy |
| Session fixation | Buat ID sesi baru setiap kali login berhasil |
| ID mudah ditebak | Pakai pengelola sesi bawaan framework, jangan buat ID sendiri |
| Cookie dipakai dari situs lain | Atribut SameSite=Lax atau Strict |
| Sesi curian dipakai lama | Batas waktu tidak aktif, logout yang menghapus sesi di server |
Atribut cookie
Tiga atribut ini sebaiknya selalu ada di cookie sesi. Secure membuat cookie hanya dikirim lewat HTTPS. HttpOnly membuat cookie tidak bisa dibaca JavaScript, sehingga skrip XSS tidak bisa mengambilnya langsung. SameSite membatasi kapan cookie ikut terkirim dari situs lain, dan sekaligus membantu menahan serangan CSRF.
Untuk aplikasi PHP yang memakai sesi bawaan, pengaturannya bisa di php.ini atau .user.ini:
session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite = "Lax"
session.use_strict_mode = 1
session.use_only_cookies = 1
use_strict_mode membuat PHP menolak ID sesi yang tidak pernah dibuat server, sehingga session fixation lebih sulit dilakukan.
Ganti ID sesi saat login
Setelah username dan password (dan 2FA) diverifikasi, buat ID sesi baru. Di PHP caranya session_regenerate_id(true); tepat setelah login berhasil. Lakukan juga saat hak akses berubah, misalnya pengguna naik menjadi admin. Framework populer seperti Laravel dan Django sudah melakukannya secara bawaan, jadi pastikan fitur itu tidak dimatikan.
Batasi umur sesi
Sesi admin yang berlaku berminggu-minggu memberi waktu panjang bagi cookie curian. Atur batas waktu tidak aktif yang wajar untuk halaman admin, pastikan tombol logout benar-benar menghapus sesi di server, dan minta login ulang untuk tindakan sensitif seperti mengganti email, password, atau rekening pembayaran.
Bagaimana dengan sisi pengguna?
Pengaturan server tidak bisa melindungi sesi yang dicuri langsung dari laptop yang terinfeksi. Karena itu, kebiasaan pengguna sama pentingnya:
- Jangan login ke akun admin dari komputer umum atau perangkat orang lain.
- Pasang ekstensi browser seperlunya, dan hanya dari sumber resmi.
- Hindari menyimpan sesi admin terus-menerus. Logout setelah selesai mengelola situs.
- Periksa daftar sesi aktif di akun penting (email, panel hosting, media sosial) dan keluarkan perangkat yang tidak dikenal.
- Bila perangkat dicurigai terinfeksi, bersihkan dulu, baru ganti password dan cabut semua sesi dari perangkat lain yang bersih.
Prinsip autentikasi yang lebih luas, termasuk passkey dan 2FA, ada di panduan autentikasi modern.
Tanda sesi mungkin dibajak
Perhatikan aktivitas yang tidak kamu lakukan: pengaturan akun berubah, ada email notifikasi login dari lokasi asing, artikel atau produk baru muncul, atau pengguna admin bertambah. Pada website, log yang menunjukkan satu ID sesi dipakai dari dua alamat IP dan browser yang sangat berbeda dalam waktu berdekatan juga patut diperiksa. Langkah pertama selalu sama: cabut semua sesi, ganti kredensial dari perangkat bersih, lalu cari cara cookie itu bisa bocor.
Pertanyaan yang sering diajukan
Apakah 2FA melindungi dari session hijacking?
Tidak sepenuhnya. 2FA melindungi proses login, sedangkan session hijacking memakai sesi yang sudah lolos login. Yang membantu adalah sesi berumur pendek, login ulang untuk tindakan sensitif, dan perangkat yang bersih.
Apakah HTTPS sudah cukup?
HTTPS menutup jalur penyadapan, tapi tidak mencegah pencurian lewat XSS atau malware di perangkat. Tetap perlu atribut cookie yang benar dan celah aplikasi yang ditutup.
Apakah mengikat sesi ke alamat IP efektif?
Bisa menambah hambatan, tapi sering mengganggu pengguna yang IP-nya berganti, misalnya saat berpindah dari Wi-Fi ke data seluler. Banyak aplikasi memilih memberi peringatan atau meminta login ulang daripada langsung memutus sesi.


