我非常关注安全性,我正在努力保护我的$ _SESSION。我想你的建议。
当用户创建帐户时,我会在数据库的个人资料中生成一个随机值11111 - 99999.
当用户登录时,我创建一个包含大部分用户数据的会话(无密码或任何关键信息)。在$ _SESSION中,我还添加了我在步骤1中创建的随机数的加密版本,我还创建了一个$ _COOKIE,其加密编号与我用来检查会话是否有效相同。
在我的应用程序上然后当我收到请求时,我检查$ _SESSION是否存在其实它应该存在但是为了防止黑客(猜测或黑客)其他人的会话ID我比较密钥的加密值来自$ _COOKIE与$ _SESSION中的一个。
主要任务是,这种方法有多安全?我看不出黑客可以通过任何方式窃取$ _SESSION ID并同时加密密钥。
密钥的加密是由位于服务器上的加密值生成的,而不是简单的md5,在我看来很容易重现。因为黑客无法知道我用来加密该密钥的加密值。
然后在最后,当用户在服务器上发送请求时,它看起来像这样(我简化了代码)。
if(isset($_SESSION['key'])){
if($_SESSION['key'] == $_COOKIE['key']){
// do stuff here
}
else {
die();
}
}
else {
die();
}
答案 0 :(得分:1)
确保您的Cookie已过期,并在注销时删除Cookie。
最重要的是,确保会话过期。 否则,有人可以窃取cookie并在以后从另一台机器继续(仍处于活动状态)会话。
我还会在加密中包含用户IP以及使会话唯一的任何其他数据。
答案 1 :(得分:0)
没有必要这样做。 PHP已经为您处理了会话验证。启动会话时,将在客户端创建cookie,在服务器端创建文件。 Cookie包含服务器端的文件名。只要cookie在浏览器或会话中被破坏,会话就会持续。
在我的应用程序上,然后当我收到请求时,我检查是否 $ _SESSION实际上存在它应该存在但是为了防止黑客( 猜测或黑客)其他人会话ID我比较加密值 来自$ _COOKIE的密钥与$ _SESSION中的密钥
从一开始你就可以session_regenerate_id(true);
让攻击者更难以劫持你的会话ID。
有关会话安全的一些读物:
答案 2 :(得分:-1)
一般的想法对我来说很好(我不是专家)。
需要考虑的事项: 当cookie不存在时会发生什么?
另一种生成基础值的方法,您可以使用哈希'不知何故,最推荐的可能是mcrypt_create_iv()
。
您提到的间隔(11111 - 99999)太窄(在计算时间内);如果你想得到花哨的random.org有适用于随机数的API(不仅仅是伪随机)