【发布时间】: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
它会这样做并问自己:
- 从会话 cookie 中分离出
data和hash - md5
hash是否等于md5( data + encryption_key )? -
data可以反序列化吗? - 所有最小数据都在这了吗?
- 此会话是否已过期?
- IP 匹配吗?
- USER AGENT 匹配吗?
如果这些答案中的任何一个为“否”,CI 会话将被销毁并重置。
所以请告诉我,这种情况下除了 PHP 本机会话之外的相对风险。
【问题讨论】:
-
安全 cookie 是什么意思?您是否通过更改 cookie 值颠覆了授权机制?不,所以它是安全的?浏览器是否允许您更改 cookie?是的。这是否意味着cookie不安全?
-
我更新了我的问题..
-
如果您使用数据库存储会话数据,CI 会话太安全了。
-
好的,但排除数据库解决方案。
-
如果没有数据库解决方案,安全性会降低,但现在您仍然可以使用加密。
标签: security codeigniter session cookies