1

我想知道用户如何操纵他的cookie。

据我所知,CI 可以知道这一点(因为 cookie 末尾的关系 cookie_value/unique_key)以及何时发生 CI 更新 cookie。

他记录了这个:

会话 cookie 数据与预期不符。这可能是一次可能的黑客攻击

关键是,有些人说使用原生 php 会话来存储登录数据,但被盗的风险是相同的(对于 CI cookie 可能更少)。我能看到的唯一区别是用户可以看到 CI cookie 会话中存储了哪些数据。

那么 CI 会话 cookie 是否安全?或者为什么它不如原生 php 会话安全?

对于一个高流量的网站,我也关心降低负载费用。

对不起我糟糕的英语..

编辑解释 CI 会话验证:

假设您不想存储敏感数据,会话 cookie 将不会被加密并且不会保存在数据库中。

根据 CI 2.1.3 会话库,CI_Session::sess_read()在第 135 行声明的方法和CI_Session::ses_write()在第 235 行声明的方法。

当 CI 创建 cookie 时,它​​会将这些数据

[array]
(
     'session_id'    => random hash,
     'ip_address'    => 'string - user IP address',
     'user_agent'    => 'string - user agent data',
     'last_activity' => timestamp
)

它序列化这个数组并在最后放置一个 md5 哈希(来自序列化数据和配置中提供的加密密钥)。

// if encryption is not used, we provide an md5 hash to prevent userside tampering
$cookie_data = $cookie_data.md5($cookie_data.$this->encryption_key);

所以当会话库会从下一个http请求初始化到CI

它会问自己:

  1. datahash会话 cookie分开
  2. md5hash是否等于md5( data + encryption_key )
  3. data可以反序列化吗?
  4. 所有最小的数据都在这里吗?
  5. 这个会话过期了吗?
  6. IP匹配吗?
  7. USER AGENT 匹配吗?

如果这些答案中的任何一个为“否”,CI 会话将被销毁并重置。

所以请告诉我,这种情况下除了 PHP 本机会话之外的相对风险。

4

3 回答 3

5

只回答“所以请告诉我,这种情况下除了 PHP 本地会话之外的相对风险”部分。

窃取会话的一个好方法是在某人的计算机上复制 cookie 并发送给自己(无论是否使用数据库表!!!!!!)然后在另一台计算机上重新使用该 cookie。当然,每个 Web 应用程序都对这种攻击持开放态度。

虽然我实际上喜欢@am05mhz 的想法,但如果您在公司中,您可能会在网络服务器上显示为相同的确切 IP 地址,而我仍然成功窃取了用户会话的副本,现在可以伪装成他.. ...在我看来,尽管我发现这个想法很有趣,但我越想越觉得整个 ip 事情不值得。

在其他基于服务器端会话的应用程序中,这也可以通过获取映射到服务器端会话的 cookie(或 jsessionid,如果在 java 和 cookie 被关闭)......毕竟总是有一些状态Web 浏览器将您映射回服务器端会话。

无论如何,如果您使用 https 并且您在 cookie 或 http 标头中使用了正确的 secureOnly 标志(不记得确切的标志),那么您将获得尽可能安全。

如果您发送整个会话客户端,您真正需要担心的唯一一件事就是永远不会将关键数据放入其中,例如密码或信用卡号等。

我们还会在 20 分钟后让我们网站上的用户超时,并删除 cookie 作为安全措施。

我不知道是否对任何人有帮助,但我想我会发布它。

编辑:重新审视 ip 的事情。对于 http,ip 工作非常好,因此您公司之外的任何人都无法窃取您的会话,但您公司内部的任何人仍然可以窃取您的会话。(即,如果通过 http 登录,无论是否使用数据库会话存储,都非常容易发送会话 cookie)。

院长

于 2013-12-09T17:21:29.147 回答
1

我强烈建议将会话存储在数据库中,因为这样更安全,要存储会话,您必须首先为此创建一个数据库表。

有关更多详细信息,请参阅文档中的将会话数据保存到数据库部分。你也可以加密cookies。Hera 是关于CodeIgniter 会话的另一个答案,它不会像您在评论中提到的那样使您的网站变慢,并且请记住,如果您将未加密的会话数据保存在用户的计算机中,那么这真的不是一个好主意,我建议您不要这样做它。

于 2012-11-26T19:13:09.590 回答
-1

CI 登录 cookie 实现了持久登录,这是一项记住我的功能,其中值保存在数据库中并设置在 cookie 中并返回给用户。如果两个值都匹配,则用户已通过身份验证。如果您不使用此功能,那么您应该使用 PHP 会话来存储身份验证/授权相关数据,这没有什么区别。您还可以为会话 cookie 启用 httpOnly 选项。

于 2012-11-26T19:02:33.137 回答