看來最流行的學派是隨機生成會話ID,在用戶登錄時重新生成會話ID,並在現有用戶登錄時定期重新生成會話ID,只是爲了提高安全性。
我正在使用備用解決方案,但我不是一個經驗豐富的PHP專家,我擔心有一個明顯的安全漏洞(或兩個或更多),我可能會錯過。
如果你可以看看下面的內容,告訴我它是如何被破壞的,我會很感激。
該腳本創建一個與用戶機器綁定的會話ID,並始終保持相同。我正在考慮將當前日期包含在散列表中,但我們的夜班工作人員隨後將在午夜退出。不是說我會聽到他們的抱怨;)
我知道,使用IP地址會打開它濫用,如果兩個用戶使用相同的操作系統和瀏覽器坐在咖啡店,使用免費的WiFi,但是這是針對內部MIS的,因此每個用戶都有自己的靜態IP地址。如果他們稍後決定讓它可以通過網絡訪問,我就麻煩了!但這不是規範的一部分:)
// Set the session ID
$session_hash = md5($_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_HOST'] . $_SERVER['REMOTE_ADDR']);
// Compare against session ID received from user
if (session_id() != $session_hash)
{
session_destroy();
unset ($_SESSION);
session_id($session_hash);
session_start();
}
else
{
// Attempt to load user details from database if $_SESSION['user_ID'] is set.
}
所有建設性意見歡迎和讚賞!
還有我以爲我很聰明。我完全明白你的觀點,但認爲PHP的內置會話並不安全。 – Kalessin 2010-11-27 11:33:55