我想知道用户如何操纵他的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
hash
是否等于md5( data + encryption_key )
?data
是否可以反序列化?如果这些答案中的任何一个为NO,则CI会话将被销毁并重置。
请告诉我,除了本案例的PHP原生会话之外的相对风险。
答案 0 :(得分:4)
回答关于&#34的部分;请告诉我,除了本案例的PHP原生会话之外的相对风险。"
窃取会话的好方法是联系某人的计算机并复制cookie并发送给自己(无论是否使用数据库表!!!!!)然后重新使用该cookie另一台电脑。当然,每个Web应用程序都可以接受此攻击。
虽然我喜欢@ am05mhz的想法,如果你在公司,你可能会显示为与网络服务器完全相同的IP地址,我仍然成功地窃取了用户会话的副本,现在可以伪装成他.....在我看来,尽管我发现这个想法很有趣,但整个ip的东西不值得我考虑它。
在其他基于服务器端会话的应用程序中,这也可以通过将映射到服务器端会话的cookie(或jsessionid,如果在java和cookie中关闭)来实现....毕竟总是有Web浏览器上的某些状态将您映射回服务器端会话。
无论如何,如果您使用的是https,并且您在Cookie或http标头中使用了正确的secureOnly标记(无法记住确切的标记),那么您将获得尽可能安全的保护。
如果您发送整个会话客户端,您真正需要担心的唯一事情就是永远不会将关键数据放入其中,如密码或信用卡号等等。
我们还会在20分钟后暂停我们网站上的用户并删除cookie作为安全措施。
我不知道是否可以帮助任何人,但我想我会发布它。
编辑:重新审视ip的事情。对于http,ip的功能非常好,因此公司外的任何人都无法窃取您的会话,但公司内部的任何人仍然可以窃取您的会话。 (即,如果使用数据库会话存储,则通过http登录时发送会话cookie非常容易)。
迪安
答案 1 :(得分:1)
我强烈建议将会话存储在数据库中,因为它以这种方式更安全,为了存储会话,您必须首先为此目的创建数据库表。
有关详细信息,请参阅文档中的Saving Session Data to a Database部分。您也可以加密cookie。 Hera是关于CodeIgniter session的另一个答案,并且它不会像您在评论中提到的那样使您的网站变慢并记住如果您将未加密的会话数据保存在用户的计算机中那么这真的不是一个好主意我建议您不要这样做。
答案 2 :(得分:-1)
CI登录cookie实现持久登录,一种记住我的功能,其中值保存在数据库中并在cookie中设置并返回给用户。如果两个值匹配,则用户进行身份验证。如果您不使用此功能,则应使用PHP会话存储与身份验证/授权相关的数据没有区别。您还可以为会话cookie启用httpOnly选项。