PHP使用Cookie在数据库中存储当前会话ID

时间:2012-08-20 20:52:29

标签: php security

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

  1. 如果您在其他设备上登录,会话ID将更改(无多重登录)
  2. 会话ID实际上是唯一标识用户登录的内容(我不确定这是否存在安全风险,因为cookie是特定于域的)
  3. 但是我想保留cookie附带的持久登录,同时仍保持安全。

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

1 个答案:

答案 0 :(得分:2)

首先,保持内容安全和持久登录不会在一起;通过以某种方式引入持久登录,您将始终危及安全性。

话虽如此,Charles Miller的article概述了这样一个系统:

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

  2. 当未登录的用户提供cookie时,会查找密钥和帐户并登录用户;之后,使用的密钥将替换为新的随机密钥(cookie也会更新)。

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

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

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

    可以找到Barry Jaspen对此设计的改进,该设计还可以处理识别盗窃检测here