我已经创建了一个使用Cookie并存储在数据库中的会话ID,因此您的登录将只与特定的会话ID工作一个登录系统。 我知道这有几个问题:
- 如果您登录其他设备上的会话ID的变化(没有多登录)
- 会话ID是真的确定作为登录的用户的唯一的事(我真的不知道,如果这是一个安全风险,因为cookie是特定领域)
不过,我想保留自带的饼干,同时仍保持东西安全的持续性登录。
有效地我想知道是否有更好的方式给用户安全地登录到使用cookie网站。
我已经创建了一个使用Cookie并存储在数据库中的会话ID,因此您的登录将只与特定的会话ID工作一个登录系统。 我知道这有几个问题:
不过,我想保留自带的饼干,同时仍保持东西安全的持续性登录。
有效地我想知道是否有更好的方式给用户安全地登录到使用cookie网站。
首先,保持东西安全和持久的登录不走在一起; 你总是会以某种方式引入持久登录危及安全。
话虽如此,一个物品从查尔斯·米勒勾勒这样一个系统:
创建(足够大)的随机密钥,优选地通过使用/dev/urandom
或openssl_random_pseudo_bytes()
并将其与一个帐户(关联于数据库术语:一个单独的表与所述随机密钥作为主(或唯一的)索引和帐户外键); 关键将是cookie的值。
当非登录用户呈现一个cookie,关键和帐户,但抬头一看,在用户登录; 之后,使用中的钥匙更换为新的随机密钥(饼干太更新)。
谁通过单独的cookie登录的用户应当询问他们的密码再次,当他们访问敏感(账户)信息。
用户应该从他的所有设备注销的选择。
这也是使用更新会话使用ID一个很好的做法session_regenerate_id()
每当用户登录(通过窗体或饼干)。 这可以防止有人从发动了对他人,并可能窃取他们的身份标识的会话固定攻击。
这种设计由巴里Jaspen的改进也可以处理身份盗用检测,可以发现在这里 。