【问题标题】:Codeigniter session cookie is secure or not?Codeigniter 会话 cookie 是否安全?
【发布时间】:2012-11-26 18:38:15
【问题描述】:

我想知道用户如何操纵他的 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 哈希(来自序列化数据和 config 中提供的加密密钥)。

// 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. 从会话 cookie 中分离出 datahash
  2. md5 hash 是否等于md5( data + encryption_key )
  3. data 可以反序列化吗?
  4. 所有最小数据都在这了吗?
  5. 此会话是否已过期?
  6. IP 匹配吗?
  7. USER AGENT 匹配吗?

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

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

【问题讨论】:

  • 安全 cookie 是什么意思?您是否通过更改 cookie 值颠覆了授权机制?不,所以它是安全的?浏览器是否允许您更改 cookie?是的。这是否意味着cookie不安全?
  • 我更新了我的问题..
  • 如果您使用数据库存储会话数据,CI 会话太安全了。
  • 好的,但排除数据库解决方案。
  • 如果没有数据库解决方案,安全性会降低,但现在您仍然可以使用加密。

标签: security codeigniter session cookies


【解决方案1】:

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

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

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

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

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

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

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

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

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

院长

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 每小时已经有 3K 的 sql 请求。如果我使用会话数据库,黑客也可以窃取包含密钥的 cookie。所以这对两者来说都是同一个问题。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2023-03-12
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多