看来最流行的学派是随机生成会话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