【问题标题】:Is it safe to store (hashed) passwords in a cookie?在 cookie 中存储(散列)密码是否安全?
【发布时间】:2010-12-06 12:24:03
【问题描述】:

我已经阅读了一些关于 SO(例如 here)的文章和问题,其中说您不应该将用户密码存储在 cookie 中。如果密码是加盐和散列的,为什么不安全?

特别是,为什么它不如使用会话安全,通常建议的替代方法?如果用户想要保持登录状态,那么这个新的 cookie(带有会话 ID/哈希)肯定与带有用户密码的那个完全一样安全吗?如果 cookie 以某种方式被“窃取”,攻击者可以以同样的方式以用户身份登录。

编辑:问题的主要症结是关于用户保持登录状态的部分,即通过“记住我吗?”复选框。在这种情况下,肯定只有一个会话吗?

【问题讨论】:

    标签: security cookies hash session passwords


    【解决方案1】:

    通过将哈希密码 + salt 放入 cookie,您:

    • 打开无限暴力向量
    • 允许任何人复制和使用 cookie(它始终允许访问;而会话会在一段时间内这样做)。
    • 如果有相关性,则更难更改散列方案

    此外,您通常需要存储其他内容来识别用户(例如他们的用户 ID,以便您可以查找他们的密码并进行匹配)。这可能会导致其他难以理解的问题。

    所以你最好只使用会话 ID 方法。

    【讨论】:

    • 我明白你的观点。但是,会话是否存在蛮力问题?如果您有数百万活跃用户(例如 Facebook),那么您可以尝试随机散列,直到得到一个有效的散列?我想它们与 IP 地址相关联?
    【解决方案2】:

    除其他区别外,如果存储了会话,则您拥有该会话。如果使用密码,从现在开始,您将拥有该用户的每个会话。

    【讨论】:

    • 但如果用户想永久保持登录状态,这肯定是无关紧要的吗?有,而且永远只会有一次会议。
    • 不一定。这当然是实现它的最简单方法,但不是唯一的方法。例如,您可以有一个轮换会话密钥。如果有人偷了一个,他们也可能得到下一个,但这会将原来的用户踢出去,然后重新登录,攻击者再次被冷落。
    【解决方案3】:

    会话通常在某种程度上被锁定到 IP 地址,以防止会话被盗。

    除此之外,会话 ID 不包含任何个人信息;你的密码,即使是加盐和散列也可以。可以重复使用经过加盐和散列的密码;会话 ID 不能。一旦会话结束,它就结束了,您需要一个新的会话 ID 才能再次模拟用户。

    【讨论】:

      【解决方案4】:

      让其他人为您处理和考虑所有这些问题怎么样?即使用 OpenID、Windows Live ID、Facebook Connect 等。

      【讨论】:

        猜你喜欢
        • 2011-01-07
        • 2011-01-22
        • 2011-01-20
        • 2011-07-11
        • 1970-01-01
        • 2021-07-15
        • 1970-01-01
        • 2015-06-22
        • 1970-01-01
        相关资源
        最近更新 更多