【问题标题】:Safety of cookies in codeigniter (and in general)codeigniter(和一般情况下)中 cookie 的安全性
【发布时间】:2015-06-29 22:44:21
【问题描述】:

我不完全了解cookies的漏洞,只是通过阅读似乎可以改变它们......

无论如何,将用户“角色”或“权限”存储在 cookie 中似乎是一种常见的做法。

这是一个不正确的假设吗?

还有什么方法可以尝试保护用户角色? 每次我想获取用户的角色时都必须查询数据库吗?

我现在正在使用 codeigniter 并做类似的事情

$this->session->set_userdata('role') = 'admin';

然后像访问它

if ($this->userdata('role') == 'admin'){
    allow access to important web aspects... and special database inserts
}

衷心感谢您的帮助或进一步的理解。

【问题讨论】:

  • Cookie 不是为了安全。如果您依赖 cookie 作为安全角色,那么用户可以为自己提供更多访问权限。
  • cookies 应该尽可能多地依赖于用户在每次请求时可以输入到文本框中的内容。会话令牌和其他用户指定的设置。永远不要做任何你不希望用户摆弄的东西。
  • 如果 cookie 被加密(就像在 Codeigniter 中一样)怎么办?
  • 不要将 cookie 与会话混为一谈...... Web 浏览器上的会话 cookie 只包含一个会话 ID;在服务器上,会话 ID 指向一个文件,该文件包含您的 PHP 代码正在访问的会话数据....会话数据无法从 Web 浏览器访问

标签: php codeigniter session cookies


【解决方案1】:

使用 cookie 存储权限的问题在于 cookie 是客户端存储,这意味着它们保存在用户的机器上,因此可以由用户修改 - 这是一个巨大的安全性缺陷。

在这方面,在 cookie 中存储权限和任何敏感数据远不是常态——它存在根本缺陷。

话虽如此,有一种方法可以以安全的方式将此类数据存储在 cookie 中,而 CodeIgniter(2.2+ 版)会话库可以做到这一点 - 它使用消息身份验证代码 (MAC) 来验证 cookie 是否具有未修改。
如果验证失败,cookie 将被丢弃,这样您就永远不会允许用户修改的 cookie 绕过您之前在其中设置的任何权限。

cookie 加密(您在 cmets 中提到)阻止用户(或任何攻击者)读取数据,但不提供任何真实性保证 - MAC 会这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 2013-09-01
    • 2010-12-04
    • 2012-03-01
    • 2011-04-15
    • 2014-06-25
    相关资源
    最近更新 更多