Pertanyaan Apakah ini penggunaan yang aman dari Variabel Sesi?


Saya menggunakan $ _SESSION ['name'] untuk menangani data dari halaman ke halaman. Saya terutama menggunakannya untuk membuat pengguna tetap masuk di antara halaman. Dalam setiap halaman, saya memeriksa apakah $ _SESSION [logged_in '] benar atau tidak. Jika benar, biarkan pengguna tetap masuk. Jika tidak, lakukan sesuatu yang lain.

Beginilah cara saya menangani sesi saya - contoh dasar:

<?php

session_start();

if($_SESSION['logged_in'])
{
   //show control panel list
}
else
{
     //show login box. Once user logs in. Once user logs in,
     //fetch userID, username, etc from database. Also set 
     //$_SESSION['logged_in'] = true.
}

?>

Di suatu tempat di antara kode saya melakukan hal berikut:

SELECT * FROM User WHERE userID = $_SESSION['userID'];

Saya tidak yakin apakah $ _SESSION ['userID'] akan dapat diakses oleh pengguna atau tidak. Jika dapat diakses, maka halaman akan menjadi ancaman karena pengguna dapat mengubah ID pengguna secara manual dan mendapatkan akses ke akun orang lain yang diinginkannya.

Saya tidak terlalu suka keamanan. Tolong saran! Apa yang dapat saya?

Catatan: Saya mencoba membuat kode sesederhana mungkin. Untuk saat ini, tidak ada oop yang terlibat.


4
2017-11-29 22:57


asal


Jawaban:


Itu cukup bagus, berikut beberapa kiat lain untuk pengelolaan sesi:

  1. Jangan menerima pengenal sesi dari variabel GET / POST: Pengenal sesi di URL (string kueri, variabel GET) atau variabel POST tidak disarankan karena menyederhanakan serangan ini. Sangat mudah untuk membuat tautan pada formulir yang mengatur variabel GET / POST.

  2. Regenerasikan SID pada setiap permintaan: Di PHP gunakan session_regenerate_id (). Setiap kali tingkat akses pengguna berubah, perlu untuk meregenerasi pengenal sesi. Ini berarti bahwa meskipun penyerang dapat mengelabui pengguna agar menerima SID yang diketahui, SID akan menjadi tidak valid ketika penyerang mencoba menggunakan SID kembali.


1
2017-11-29 23:15



Kode Anda rentan terhadap fiksasi sesi dan serangan pembajakan sesi. Lihat http://phpsec.org/projects/guide/4.html untuk informasi lebih lanjut.

Saat Anda membuat aplikasi yang lebih besar dan lebih terlibat, Anda juga ingin berhati-hati dalam menangani penebangan pengguna dan menangani aspek terkait sesi lainnya, seperti eskalasi hak istimewa. Menangani sesi dan login dengan aman adalah binatang yang licik.

Menerapkan otentikasi aman sulit. Kecuali Anda melakukannya sebagai latihan akademis, saya akan sangat menyarankan menggunakan perpustakaan yang disediakan oleh kerangka Anda, jika Anda cukup beruntung untuk memiliki yang bagus.

Anda juga akan ingin mempertimbangkan hal-hal seperti berikut:

  • Jangan biarkan id sesi dipaksa. [fiksasi sesi]
  • Ketika izin atau kredensial diubah (misalnya karena pengguna kini masuk atau keluar) segera batalkan sesi dan mulai yang baru.
  • Berikan fitur keluar, dan pastikan untuk membatalkan sesi saat keluar.
  • Setel cookie sesi ke HttpOnly -Preferably, membutuhkan HTTPS dan alo mengatur cookie hanya untuk mengamankan.
  • Pertimbangkan membatasi validitas sesi untuk menyertakan pemeriksaan beberapa informasi lain yang membantu mencocokkan pengguna, mis. Agen pengguna. [pembajakan sesi]
  • Selalu kadaluarsa sesi setelah tidak digunakan dan jangan terapkan "biarkan saya tetap masuk" dengan menghubungkan kembali pengguna ke sesi http lama mereka.
  • Pastikan bahwa semua data yang terkait dengan sesi dihancurkan ketika sesi tidak valid, terlepas dari tempat penyimpanannya. Seorang pengguna baru datang, mungkin saja mendapat id sesi yang telah digunakan sebelumnya. Sesi baru ini tidak boleh memiliki akses ke data sesi yang telah ditetapkan sebelumnya terhadap id sesi itu.

3
2017-11-30 09:54



$ _SESSION adalah salah satu sisi server Super Globals. Ini tidak dapat diakses oleh pengguna atau dikirim dari server Anda dengan cara apa pun.


2
2017-11-29 23:00



Ya, itu ide yang bagus.

Berikut adalah beberapa sumber daya yang dapat membantu, baik dengan memahami keamanan sesi dan pemrograman aman secara umum:

http://phpsec.org/projects/guide/4.html http://phpsec.org/projects/guide/


1
2017-11-29 23:11