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