-2

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

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

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

我知道基本上httpOnly没有攻击者应该能够抓住一个cookie,但我想这个项目可能也可能不会使用SSL,所以有旧的点击方法可用。我知道我正在尝试在这里用棍棒和石头建造一座摩天大楼,但询问仍然值得一试。

4

2 回答 2

3

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

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

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

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


**最近发现 Chrome 以明文形式存储保存的密码,没有选择使用主密码对其进行加密(请参见此处)。这在网上引发了一场关于某些安全功能是否只是“戏剧”的争论(即只看起来安全而没有实际增加有形的额外安全性)。

于 2013-09-08T10:20:28.693 回答
1

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

于 2013-09-08T11:02:46.743 回答