我希望我的网站有一个用户可以单击的复选框,这样他们每次访问我的网站时都不必登录。我知道我需要在他们的计算机上存储一个 cookie 来实现这一点,但是那个 cookie 中应该包含什么?
此外,是否存在需要注意的常见错误,以防止此 cookie 出现安全漏洞,在仍然提供“记住我”功能的同时可以避免这些错误?
我希望我的网站有一个用户可以单击的复选框,这样他们每次访问我的网站时都不必登录。我知道我需要在他们的计算机上存储一个 cookie 来实现这一点,但是那个 cookie 中应该包含什么?
此外,是否存在需要注意的常见错误,以防止此 cookie 出现安全漏洞,在仍然提供“记住我”功能的同时可以避免这些错误?
您可以使用此处描述的此策略作为最佳实践(2006) 或此处描述的更新策略(2015):
这种方法提供纵深防御。如果有人设法泄露数据库表,它不会为攻击者提供冒充用户的机会。
存储他们的 UserId 和 RememberMeToken。当他们使用记住我登录时,检查生成一个新的 RememberMeToken(这会使任何其他标记为记住我的机器无效)。
当他们返回时,通过记住我的令牌查找它们并确保 UserId 匹配。
我会存储一个用户 ID 和一个令牌。当用户返回站点时,将这两条信息与数据库条目等持久性信息进行比较。
至于安全性,请不要在其中放置任何允许某人修改 cookie 以获得额外好处的东西。例如,不要存储他们的用户组或密码。任何可以修改的会绕过您的安全性的内容都不应存储在 cookie 中。
我自己调查持久会话我发现它根本不值得冒安全风险。如果您绝对必须使用它,但您应该考虑这样的会话仅经过弱身份验证,并强制新登录以获取任何可能对攻击者有价值的内容。
原因当然是包含持久会话的 cookie 很容易被盗。
窃取 cookie 的 4 种方法(来自Jens Roland在页面上@splattne
基于他的回答的评论):