我想知道用户如何操纵他的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
它会问自己:
data
与hash
会话 cookie分开- md5
hash
是否等于md5( data + encryption_key )
? data
可以反序列化吗?- 所有最小的数据都在这里吗?
- 这个会话过期了吗?
- IP匹配吗?
- USER AGENT 匹配吗?
如果这些答案中的任何一个为“否”,CI 会话将被销毁并重置。
所以请告诉我,这种情况下除了 PHP 本机会话之外的相对风险。