在cookie中存储(哈希过的)密码是否安全?

3
我读过一些关于SO(例如这里)的文章和问题,它们说你不应该将用户的密码存储在cookie中。如果密码被加盐和哈希,为什么这是不安全的?
特别地,为什么它比通常建议的使用会话更不安全?如果用户想要保持登录状态,那么这个新的cookie(带有会话ID /哈希)肯定和包含用户密码的cookie一样安全,如果cookie以某种方式被“窃取”,攻击者可以用同样的方式登录用户。
编辑:问题的主要焦点在于用户保持登录状态,即通过“记住我?”复选框。在这种情况下,肯定只有一个会话吧?
4个回答

13
通过将哈希密码+盐值放入cookie中,您会:
  • 打开一个无限的暴力破解向量
  • 允许任何人复制和使用cookie(它总是允许访问;而会话在一段时间内才能这样做)。
  • 如果有必要改变哈希方案,增加了更改的难度
此外,您通常需要存储其他信息来标识用户(例如他们的用户ID,以便您可以查找其密码并进行匹配),这可能会导致其他模糊问题。
因此,最好采用会话ID方法。

我理解你的观点。但是,会话方案不是存在暴力破解问题吗?如果有数百万活跃用户(例如Facebook),那么你可以尝试随机哈希值,直到找到一个有效的哈希值为止?我想它们应该与IP地址绑定了吧? - DisgruntledGoat

4

除此之外,如果一个会话被存储,您拥有该会话。如果获取了密码,则从现在开始您将拥有该用户的每个会话。


注:pwd指密码,session指会话。

但是如果用户想要永久保持登录状态,那么这显然是无关紧要的,因为只会有一个会话。 - DisgruntledGoat
不一定。这当然是最简单的实现方式,但不是唯一的方式。例如,您可以使用轮换会话密钥。如果有人窃取了一个密钥,他们可能也会得到下一个密钥,但这将使原始用户退出,然后重新登录,攻击者再次被排除在外。 - Matthew Scharley

3

会话通常在某种程度上与IP地址关联,以防止会话被盗。

除此之外,会话ID不包含任何个人信息;即使是加盐和哈希的密码也是如此。密码,即使加盐和哈希也可能被重复使用;会话ID则不能。一旦会话结束,它就结束了,您需要一个新的会话ID才能再次冒充用户。


1

如果让其他人为您处理和思考所有这些问题,怎么样呢?也就是说,使用OpenID、Windows Live ID、Facebook Connect等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接