小编典典

为网站实施“记住我”的最佳方式是什么?

all

我希望我的网站有一个用户可以单击的复选框,这样他们每次访问我的网站时都不必登录。我知道我需要在他们的计算机上存储一个 cookie 来实现这一点,但是那个
cookie 中应该包含什么?

此外,是否存在需要注意的常见错误,以防止此 cookie 出现安全漏洞,在仍然提供“记住我”功能的同时可以避免这些错误?


阅读 106

收藏
2022-03-10

共1个答案

小编典典

改进的持久登录 Cookie 最佳实践

您可以使用此处描述的此策略作为最佳实践(2006)
此处描述的更新策略(2015):

  1. 当用户在选中记住我的情况下成功登录时,除了标准会话管理 cookie 之外,还会 发出一个登录cookie。
  2. 登录 cookie 包含 一个系列标识符和一个令牌 。系列和令牌是来自适当大空间的 不可猜测的随机数。 两者都一起存储在数据库表中, 令牌被散列 (sha256 很好)。
  3. 当未登录用户访问该站点并显示登录 cookie 时,将 在数据库中查找 系列标识符。
    1. 如果存在 系列标识符 并且 令牌 的哈希与该系列标识符的哈希匹配,则认为用户已通过 身份验证 。生成一个 新令牌 ,该令牌的新哈希存储在旧记录上,并向用户发出一个新的登录 cookie(可以重复使用 系列标识符 )。
    2. 如果该系列存在但令牌不匹配,则假定为 盗窃。 用户会收到措辞强硬的警告,并且用户记住的所有会话都将被删除。
    3. 如果用户名和系列不存在,登录 cookie 将被 忽略

这种方法提供纵深防御。如果有人设法泄露数据库表,它不会为攻击者提供冒充用户的机会。

2022-03-10