用于“记住我”饼干的哈希或代币?

时间:2011-11-25 17:27:21

标签: security authentication

当谈到记住我 cookie时,有两种截然不同的方法:

散列
记住我 cookie存储了一个可以识别用户的字符串(即用户ID)和一个可以证明所识别的用户是它假装的用户的字符串 - 通常是基于用户密码的哈希

令牌
记住我 cookie存储一个随机(无意义)但唯一的字符串,该字符串与令牌表中的记录相对应,用于存储用户ID。

哪种方法更安全,有什么缺点?

3 个答案:

答案 0 :(得分:9)

如果可能,您应该使用随机生成的令牌。当然,缺点是你必须编写一些额外的代码来存储和使用它们在服务器端,所以这可能不适用于所有的Web应用程序。但从安全角度来看,这有明显的优势:

  1. 攻击者无法从用户ID生成令牌,但他肯定会生成哈希值。这是一个很大的问题,即使你在生成哈希时使用盐(你应该),如果盐落入坏人之手,你的用户也会被搞砸。

  2. 通过提供这些令牌,您的用户(或您的管理员,如果需要)可以“注销”他们可能想要摆脱的某些会话。这实际上是一个很酷的功能,例如谷歌和Facebook使用它。

  3. 所以,如果你有时间和预算:绝对是令牌。

答案 1 :(得分:4)

通常你保留令牌 - >用户映射服务器端的安全性。因此,最终您的安全性都基于保持令牌安全并确保其生命周期受到控制(例如,它过期和/或仅在从与证书的原始提供者使用的IP相同的IP提供给您时才有效 - 再次,只是一个例子)

Security of token based authentication

希望这有帮助。

答案 2 :(得分:1)

如果每次产生随机字符串,则令牌会更安全。

另一方面,记住我的重点是用户不必再次登录,因此除非他们点击退出,否则很少需要重新生成新令牌,除非它过期。 / p>

我猜你应该坚持使用令牌而不是为了懒惰牺牲安全性:-p