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

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

另外,是否还有一些常见的错误需要注意保持这个cookie不会出现安全漏洞,在保留“记住我”功能的同时可以避免这种安全漏洞?


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

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

  • 当用户成功登录并记住我时,除标准会话管理cookie之外,还会发布登录 cookie。
  • 登录cookie包含一个系列标识符和一个令牌 。 该系列和标记是来自适当大的空间的不可猜测的随机数 。 两者都存储在一个数据库表中, 令牌被散列 (sha256很好)。
  • 当未登录的用户访问该站点并显示登录cookie时,将在数据库中查找该系列标识符。
  • 如果系列标识符存在,并且令牌的散列与该系列标识符的散列相匹配,则认为用户已通过认证 。 生成新的令牌令牌的新哈希存储在旧的记录上,并向用户发出新的登录Cookie(重新使用系列标识符也没问题 )。
  • 如果系列存在但令牌不匹配,则认为是盗用 。 用户收到措辞强烈的警告,并且用户的所有会话都被删除。
  • 如果用户名和系列不存在,则会忽略登录cookie。
  • 这种方法提供纵深防御。 如果有人设法泄露数据库表,它不会给攻击者冒充用户模拟门户。


    我会存储一个用户ID和一个令牌。 当用户回到网站时,将这两条信息与数据库条目等持久性信息进行比较。

    至于安全性,只是不要在那里放置任何可以让别人修改cookie来获得额外好处的东西。 例如,不要存储他们的用户组或他们的密码。 任何可以修改以避免安全性的事物都不应该存储在cookie中。


    存储他们的UserId和一个RememberMeToken。 当他们登录时记住我检查了生成一个新的RememberMeToken(这使任何其他标记的机器都记住我)。

    当他们返回时,通过记住我的标记来查找它们,并确保UserId匹配。

    链接地址: http://www.djcxy.com/p/21665.html

    上一篇: What is the best way to implement "remember me" for a website?

    下一篇: How to test my Ruby on Rails website against brute force properly?