8

如果用户登录该站点并说“记住我”,我们将获得该用户的唯一标识符,使用 RijndaelManaged 对其进行加密,密钥大小为 256,并将其放入 httponly cookie 中,设置有效期为 120 天,每次对服务器的成功请求都会刷新过期时间。

可选地,我们根据用户代理和部分 ipv4 地址(最后两个八位字节)生成初始化向量。

显然没有内置真正的过期系统,从技术上讲,用户可以永远使用这个加密密钥(假设我们不更改服务器端密钥)..

我考虑到要允许此功能,我需要允许用户能够绕过登录并给我他们的唯一 ID(这是一个 guid),我认为单独的 guid 很难猜出一个真正的用户 guid,但是会使站点容易受到botnots生成guid的攻击(我不知道他们找到合法的guid有多现实)..所以这就是为什么在服务器知道加密密钥的地方进行加密,以及可选的iv特定于浏览器和 ip 部分。

我是否应该考虑另一种方法,让服务器发出与用户关联的票证,这些票证将有一个已知的到期日期,以便服务器控制到期?我真的应该关心到期吗?记住我到底还是记住我?

期待被谦卑;),干杯。

4

3 回答 3

6

非常相似的问题。

您的问题的解决方案在这篇博文中

“持久登录 Cookie 最佳实践”描述了一种相对安全的方法来为网站实施熟悉的“记住我”选项。在本文中,我提出了一项改进,它保留了该方法的所有优点,但也可以检测持久登录 cookie 何时被攻击者窃取和使用。

正如 Jacco 在评论中所说:有关安全身份验证的深入信息,请阅读网站身份验证权威指南

于 2009-03-27T12:26:27.130 回答
0

你考虑过像 Open Id 这样的东西吗?正如 SO 使用的那样。

于 2009-03-27T12:18:03.657 回答
0

被记住的信息有多重要?如果它不是非常私人或重要的东西,只需在 cookie 中添加一个 GUID。

在计算中包含 IP 地址可能是个坏主意,因为它会使使用公共网络的用户立即被遗忘。

使用蛮力查找 GUID 是荒谬的,因为有 2 128种可能性。

于 2009-03-27T12:19:17.523 回答