Mengapa dan kapan saya harus menggunakan session_regenerate_id()
fungsi di php? Haruskah saya selalu menggunakannya setelah saya menggunakan session_start()
? Saya telah membaca bahwa saya harus menggunakannya untuk mencegah fiksasi sesi, apakah ini satu-satunya alasan?
php
session
session-fixation
rvandoni.dll
sumber
sumber
Jawaban:
Apa
session_regenerate_id()
?Seperti namanya fungsi, ini adalah fungsi yang akan menggantikan ID sesi saat ini dengan yang baru, dan menyimpan informasi sesi saat ini.
Apa fungsinya?
Ini terutama membantu mencegah serangan fiksasi sesi. Serangan fiksasi sesi adalah saat pengguna jahat mencoba mengeksploitasi kerentanan dalam sistem untuk menetapkan (mengatur) ID sesi (SID) pengguna lain. Dengan demikian, mereka akan mendapatkan akses penuh sebagai pengguna asli dan dapat melakukan tugas-tugas yang seharusnya memerlukan otentikasi.
Untuk mencegah serangan tersebut, tetapkan pengguna ID sesi baru yang digunakan
session_regenerate_id()
saat dia berhasil masuk (atau untuk setiap permintaan X). Sekarang hanya dia yang memiliki ID sesi, dan ID sesi lama (terpaku) Anda tidak lagi valid.Kapan saya harus menggunakan
session_regenerate_id()
?Seperti yang ditunjukkan oleh symbecean pada komentar di bawah, id sesi harus diubah pada setiap transisi dalam status otentikasi dan hanya pada transisi otentikasi.
Bacaan lebih lanjut:
sumber
Anda harus menggunakan
session_regenerate_id()
untuk menghentikan pembajakan sesi dan fiksasi sesi .Dari jawaban Security.SE ini :
Dari halaman web ini :
Kapan Menggunakan
Saat pengguna mengedit / memperbarui beberapa input penting (mengubah sandi, kredensial, lupa sandi, dll.) Yang dapat membahayakan keamanan situs atau kebijakan privasi.
Lihat juga:
Panduan Keamanan PHP: Sesi
Fiksasi Sesi (Bacaan bagus)
sumber
Saya pikir masalah keracunan sesi telah dibahas dengan cukup baik.
Untuk menjawab pertanyaan "Kapan saya harus menggunakan ini?" bagian, penting untuk mundur dan mempertimbangkan apa yang aplikasi Anda lakukan dengan sesi tersebut. Atau, dengan kata lain, ini adalah pertanyaan keamanan utama yang perlu Anda jawab
Jika yang Anda lakukan hanyalah melacak data anonim (pengguna datang ke situs dan Anda menggunakannya untuk melacak kunjungan mereka) maka ada sedikit alasan untuk membuat ulang sesi. Seorang pembajak tidak akan mendapatkan apa pun yang berharga dengan mengambil sesi itu.
Namun, banyak situs menawarkan login. Sebuah login mengubah banyak hal. Saya dapat mengakses profil saya. Saya dapat mengubah pengaturan. Jadi pembajak mungkin menginginkan akses akun saya, terutama jika pengguna normal dan admin semua menggunakan sesi untuk mengelola login. Jadi, ketika orang datang ke situs saya dan masuk, saya membuat ulang sesi. Ini menambahkan lapisan keamanan ekstra yang kecil kemungkinannya bagi pengguna saya yang baru masuk untuk dibajak.
Setiap kali kami menambahkan data penting ke sesi, Anda harus mempertimbangkan untuk membuat ulang ID sesi. Jika Anda perlu memperkuat aplikasi Anda terhadap fiksasi maka regenerasi acak dapat berguna tetapi saya TIDAK PERNAH membuat ulang pada setiap permintaan. Secara default PHP menyimpan sesi dalam file di disk lokal. Anda menambahkan banyak disk I / O untuk mengurangi vektor serangan yang relatif kecil. Jika Anda benar-benar membutuhkan lebih banyak keamanan, saya akan menganjurkan menggunakan HTTPS penuh daripada regenerasi secara teratur (HTTPS membuat fiksasi sangat sulit dilakukan).
sumber
Mengapa saya harus menggunakan
session_regenerate_id
?Anda harus menggunakannya untuk mencegah fiksasi sesi .
Kapan saya harus menggunakan
session_regenerate_id
?Setiap kali status otentikasi berubah, itu terutama saat masuk dan keluar.
Contoh
Bob duduk di depan komputer umum dan dengan menjelajahi stackoverflow.com dia membuka sesi baru di sana. ID sesi disimpan dalam cookie (dengan
httpOnly
bendera untuk mencegah akses melalui javascript). Bayangkan Stack Overflow memiliki HTTPS yang selalu aktif dan jugasecure
flag yang disetel untuk cookie.Bagaimana kita bisa mencuri sesi itu sekarang?
Bob menuliskan ID sesi. Dia meninggalkan komputer tanpa menutup browser. Sekarang Alice datang ke komputer ini dan melihat Stack Overflow sudah dimuat. Dia masuk sekarang.
Sekarang kami berada pada tahap di mana Anda harus menggunakan
session_regenerate_id
. Jika Anda tidak membuat ID sesi baru di sini selama login, Bob dapat menggunakan sesi sebelumnya yang dia tulis untuk mengakses sesi Alice dan akan login sebagai Alice sekarang.sumber
session_regenerate_id()
dikeluarkan, Alice dapat mengakses akun bobs? Apakah itu benar?Anda dapat menggunakannya untuk keamanan yang lebih baik.
Dengan cara ini Anda membuat id sesi untuk satu kali penggunaan.
Katakanlah id sesi pengguna Anda adalah = 3
Beberapa peretas meretas klien Anda dan mendapatkan session_id mereka. Jadi peretas dapat menggunakan cookie itu untuk menggunakan sesi mereka.
Jika Anda memiliki kode suka
Anda dapat mengubah sesinya setiap kali mereka menggunakan situs web Anda.
Sekarang hacker mendapatkan sessionid = 3
tetapi Anda telah mengubah sesi setelah dia menggunakannya jadi milik Anda
pengguna memiliki sessionid = 4 // auth
peretas memiliki sesi = 3 // null
Tetapi ada sedikit gunanya katakanlah Anda menggunakan metode regenerasi dan klien Anda hanya masuk ke situs web dan menutup browser atau tidak aktif. Klien Anda memiliki sessionid = 4 dan jika peretas mendapatkan cookie di bagian itu, mereka akan memiliki sessionid yang sama.
Seperti yang dijelaskan di atas, cara ini Anda dapat melindungi klien Anda dari data sniffing dengan satu cara, tetapi tetap saja tidak akan memperbaiki masalah ini untuk selamanya.
Tapi itu akan jauh lebih aman jika Anda menggunakan SSL enc.
Maaf untuk bahasa Inggris yang buruk.
sumber
Kasus penggunaan sederhana:
Sesi dimulai dan entri dibuat dalam database. Gerobak pengguna diidentifikasi oleh id sesinya.
Untuk setiap produk yang ditambahkan, catatan dibuat di tabel gerobak toko saya. Juga diidentifikasi oleh id sesi.
Pengguna memutuskan untuk menyimpan gerobaknya. Sekarang sedang dilampirkan ke id penggunanya.
Id sesssion dibuat ulang dan pengguna sekarang dapat memulai kembali membuat kereta toko lain.
sumber
sumber