3

我创建了一个使用 cookie 并将会话 ID 存储在数据库中的登录系统,因此您的登录仅适用于该特定会话 ID。我意识到这有几个问题:

  1. 如果您在另一台设备上登录,则会话 ID 会更改(没有多次登录)
  2. 会话 ID 实际上是唯一将用户标识为已登录的东西(我不确定这是否存在安全风险,因为 cookie 是特定于域的)

但是,我想保留 cookie 附带的持久登录,同时仍然保持安全。

实际上,我想知道是否有更好的方法可以使用 cookie 将用户安全地登录到网站。

4

1 回答 1

2

首先,保持东西的安全和持久登录不能一起使用。您总是会通过以某种方式引入持久登录来损害安全性。

话虽如此,查尔斯米勒的一篇文章概述了这样一个系统:

  1. 创建一个(足够大的)随机键,最好使用/dev/urandomoropenssl_random_pseudo_bytes()并将其与帐户相关联(在数据库术语中:一个单独的表,其中随机键作为主(或唯一)索引,帐户作为外键);关键将是 cookie 值。

  2. 当未登录的用户出示 cookie 时,会查找密钥和帐户并登录用户;之后,使用的密钥被一个新的随机密钥替换(cookie 也被更新)。

  3. 仅通过 cookie 登录的用户在访问敏感(帐户)信息时应再次被要求输入密码。

  4. 用户应该可以选择从他的所有设备中注销。

session_regenerate_id()每当用户登录时(通过表单或 cookie),使用更新会话 ID 也是一个好习惯。这可以防止某人对其他人发起会话固定攻击并可能窃取他们的身份。

可以在此处找到 Barry Jaspen 对这种设计的改进,它还可以处理身份盗窃检测。

于 2012-08-21T01:36:40.340 回答