Cookie代替会话?

时间:2013-09-08 10:13:42

标签: php security session cookies

我对会话的阅读和了解是,他们并不是真正可靠的所有会话ID劫持和东西。所以我决定不在我的项目中使用会话,我宁愿选择普通的cookie并希望最好。

所以基本上我所设置的有点像会话,但希望更难破解。不幸的是,我似乎无法建立它难以破解。所以基本上我认为这更像是一个安全问题而不是cookie或会话之间的选择,但我似乎无法在任何直接文本中找到它。

我应该在会话cookie中散列什么以及如何?我已经读过哈希算法可能会发生冲突,攻击者可以创建一个碰撞的字符串,即使它实际上在cookie中,即使它可能不相同,也只需要几秒钟。我想我想问的是,在cookie中保存这些信息的正确方法是什么,实际上我应该在那里存储哪些信息?

我知道基本上只有httpOnly攻击者才能抓住cookie,但我想这个项目可能并且可能不会使用SSL所以可以使用旧的攻击方法。我知道我正在尝试用棍棒和石头建造一座摩天大楼,但要求仍然值得一试。

2 个答案:

答案 0 :(得分:3)

完全避开会话的问题是某些值不应该是用户可设置的。例如,如果您有一个会话变量is_logged_in,该变量仅在用户成功进行身份验证时设置,那么使用cookie安全地实现此变量将非常棘手。问题在于用户可以设置自己的cookie(因为它来自客户端)并在没有密码的情况下自行登录。

现在,您可以通过将用户的凭据存储在Cookie中并对每个请求进行身份验证来使用此方法,但这也会遇到许多问题。首先,限制以明文形式向服务器发送凭据的频率是个好主意;如果你使用会话,那么你只发送一次。其次,这种方法意味着密码以未加密的方式存储在本地计算机上(网站的存储密码通常使用主密码加密**)。因此,这种方法可能会恶化用户的整体安全性。

可以通过登录来缓解这些问题,并让您的登录系统设置加密的Cookie(使用对称加密)。这些将针对每个请求进行解密和验证,并且对于每个请求都可以安全地传输,并且存储在本地计算机cookie上更安全。但是,在这里你增加了相当多的复杂性。

因此,我倾向于建议你坚持使用会话,但要对所出现的任何安全问题进行必要的阅读。


** 最近发现Chrome以明文形式存储了已保存的密码,无法使用主密码(see here)对其进行加密。这引发了一场关于某些安全功能是否只是“剧院”的辩论(即只看起来安全而没有实际增加有形的额外安全性)。

答案 1 :(得分:1)

实际上,您希望用Cookie替换Cookie(来自会话)。没有意义!