如果用户登录该站点并说“记住我”,我们会获得该用户的唯一标识符,使用密钥大小为256的RijndaelManaged加密,并将其放置在设置为exp的设置过期的httponly cookie中。 120天,到期时刷新每次成功请求到服务器。
可选地,我们基于用户代理和ipv4地址的一部分(最后两个八位字节)生成初始化向量。
显然没有内置真正的过期系统,用户可以在技术上永远使用这个加密密钥(假设我们不更改服务器端密钥)..
我考虑过这样一个事实:为了允许这个功能,我需要允许用户绕过登录并给我他们唯一的ID(这是一个guid),我认为单独的guid很难猜到一个真实的用户guid,但会让网站开放攻击由botnots生成guid(我不知道他们找到一个合法的guid是多么现实)..所以这就是为什么服务器知道加密密钥的加密,以及可选地,iv特定于浏览器和ip部分。
我是否应该考虑服务器发出与用户关联的故障单的不同方法,并且这些故障单将具有已知的到期日期,以便服务器保持对期满的控制权?我真的应该关心到期吗?还记得我记得我吗?
期待被贬低;), 欢呼声。
答案 0 :(得分:6)
您的问题的解决方案在blog post
中“持久登录Cookie最佳 实践,“描述一个相对 安全的实施方法 熟悉的“记住我”网络选项 站点。在这篇文章中,我提出了一个 保留所有的改进 这种方法的好处,但也 可以检测何时a 持久登录cookie已经 被攻击者窃取并使用。
正如Jacco在评论中所说:有关安全身份验证的深入信息,请阅读The Definitive Guide To Website Authentication。
答案 1 :(得分:0)
您是否考虑过像Open Id这样的内容?因为SO使用。
答案 2 :(得分:0)
记住的信息有多重要?如果它不是任何非常个人或重要的东西,只需在cookie中添加一个GUID。
在计算中包含IP地址可能是一个坏主意,因为它会立即忘记使用公共网络的用户。
使用强力查找GUID是荒谬的,因为有2个 128 的可能性。