首页 文章

为网站实现“记住我”的最佳方法是什么? [关闭]

提问于
浏览
472

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

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

4 回答

  • 7

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

    您可以使用here as best practice(2006)或an updated strategy described here(2015)描述的此策略:

    • 当用户使用“记住我”选中成功登录时,除了标准会话管理cookie之外还有一个 login cookie is issued .

    • 登录cookie包含 a series identifier and a token . 该系列和令牌来自适当大的空间 unguessable random numbers . 两者一起存储在数据库表中, the token is hashed (sha256很好) .

    • 当未登录的用户访问该站点并显示登录cookie时,系列标识符为 looked up in the database .

    • 如果 series identifier 存在且 token 的散列与该系列标识符的散列匹配,则该用户被视为 authenticated . 生成 new token ,令牌的新哈希存储在旧记录上,并向用户发出新的登录cookie(可以重新使用 series identifier ) .

    • 如果系列存在但令牌不匹配,则假定 theft . 用户收到强烈警告的警告,并删除所有用户记住的会话 .

    • 如果用户名和系列不存在,则登录cookie为 ignored .

    这种方法提供了纵深防御 . 如果有人设法泄漏数据库表,则不会让攻击者为冒充用户打开大门 .

  • 9

    我会存储用户ID和令牌 . 当用户回到站点时,将这两个信息与数据库条目之类的持久性进行比较 .

    至于安全性,只是不要在其中放置任何允许某人修改cookie以获得额外好处的东西 . 例如,不要存储其用户组或密码 . 任何可以修改以避免安全的内容都不应存储在cookie中 .

  • 498

    存储他们的UserId和RememberMeToken . 当他们登录时记住我检查生成一个新的RememberMeToken(使任何其他标记的机器无效,记住我) .

    当他们返回时通过记住我的令牌查找它们并确保UserId匹配 .

  • 4

    我自己调查持续会话我发现它根本不值得冒安全风险 . 如果你绝对必须使用它,但是你应该考虑这样一个只有弱验证的会话并强制新的登录以获取对攻击者有 Value 的任何东西 .

    当然,原因在于您的持久会话中的cookie很容易被盗 .

    4种窃取你的cookie的方法(来自a comment by Jens Roland页面 @splattne 基于他的回答):

    • 通过不安全的线路拦截它(数据包嗅探/会话劫持)

    • 直接访问用户的浏览器(通过恶意软件或物理访问框)

    • 从服务器数据库中读取它(可能是SQL注入,但可能是任何东西)

    • 由XSS hack(或类似的客户端漏洞利用)

相关问题