Codeigniter / PHP会话安全问题

时间:2011-06-11 16:40:52

标签: php session codeigniter session-cookies

我正在使用Codeigniter开发Web应用程序。当用户使用我的网站进行身份验证时,我当前正在将我的“用户标识符”存储在我的会话cookie中(我已启用加密)。我的一些模型类使用session / cookie的'user-identifier'参数中的值来更改用户帐户的属性。

我担心的是,我想知道某人是否可以使用我设置的用户标识符来获取有效的codeigniter-session cookie,将用户标识符的值更改为其他用户的值,以及更改其他用户的帐户。如果有人试图更改会话cookie的属性,codeigniter / php会话会产生错误吗?

3 个答案:

答案 0 :(得分:21)

打开你的/application/config/config.php,找到“sess_use_database”并将其更改为“TRUE”(如果你还没有)。这样,所有会话变量都将存储在数据库表中,而会话cookie将只包含会话ID字符串。

为了增加安全性,您还可以将“sess_match_ip”更改为TRUE。这样,如果某人窃取了您用户的cookie并尝试将其作为自己的cookie传递,会话将被销毁。

答案 1 :(得分:4)

  

“如果   它可以采取一个   有效的codeigniter-session cookie   将user-identifier的值更改为   不同用户的价值,和   对其他用户进行更改   帐户“。

我的答案与CI无关,所以请记住这一点。

当您授权用户“username1”时,应该将哪些内容发送回客户端,出于授权目的,应该是服务器与该用户关联的哈希值。客户端和服务器之间的所有通信都依赖于该哈希值。

服务器将为每个用户生成一个唯一的哈希,并且哈希的生存时间很短。有人可以捕获哈希并作为该用户传递吗?当然。这就是为什么你还要检查用户的代理和IP,检查它们是否与哈希匹配,以防止会话劫持。

永远不要这样做:
如果看到一些新的开发人员在cookie中存储用户名并在该客户端上重新发送变量来更新他们的数据库。永远不要这样做。永远不要相信客户。当服务器获取客户端的哈希时,它应检查它是否属于经过身份验证的用户,并从服务器获取user_id(用于更新用户数据的变量)。绝不是来自客户。

答案 2 :(得分:3)

我不确定你的“用户标识符”到底是什么。一般规则是,不要在会话cookie中存储任何内容,而是存储会话ID。在服务器端内部存储其他所有内容(如用户ID),并使用会话ID检索它。

如果用户更改会话ID(随机字符串),则会启动新会话。会话ID背后的想法是,不可能猜出其他用户的ID - 这就是为什么它是随机的,并且这么久。