我创建了一个使用cookie并在数据库中存储会话ID的登录系统,因此您的登录只能使用该特定会话ID。我意识到这有一些问题:
但是我想保留cookie附带的持久登录,同时仍保持安全。
实际上,我想知道是否有更好的方法可以使用cookie安全地将用户登录到网站。
答案 0 :(得分:2)
首先,保持内容安全和持久登录不会在一起;通过以某种方式引入持久登录,您将始终危及安全性。
话虽如此,Charles Miller的article概述了这样一个系统:
创建一个(足够大的)随机密钥,最好使用/dev/urandom
或openssl_random_pseudo_bytes()
并将其与帐户关联(在数据库术语中:以随机密钥为主要单独的表) (或唯一的)索引和帐户作为外键);密钥将是cookie值。
当未登录的用户提供cookie时,会查找密钥和帐户并登录用户;之后,使用的密钥将替换为新的随机密钥(cookie也会更新)。
在访问敏感(帐户)信息时,应该再次要求通过cookie登录的用户再次输入密码。
用户应该可以选择从他的所有设备注销。
每当用户登录时(通过表单或cookie),使用session_regenerate_id()
更新会话ID也是一种很好的做法。这可以防止某人针对其他人发起会话固定攻击,并可能窃取他们的身份。
可以找到Barry Jaspen对此设计的改进,该设计还可以处理识别盗窃检测here。