我想知道在会话中存储用户ID的风险是什么?
然后只需执行一个
if(isset($_SESSION['user_id'])){
login_user($_SESSION['user_id]);
}
会话是否加密得足够安全,以至于我们无需对其进行哈希处理而担心呢? 有人能够更改他们的ID的机会有多大?
我想知道在会话中存储用户ID的风险是什么?
然后只需执行一个
if(isset($_SESSION['user_id'])){
login_user($_SESSION['user_id]);
}
会话是否加密得足够安全,以至于我们无需对其进行哈希处理而担心呢? 有人能够更改他们的ID的机会有多大?
大多数应用程序像你一样使用$_SESSION
。如果存在普遍的弱点,那么重要的项目将会采取不同的方法。
在$_SESSION中存储用户ID是一种相当常见的做法。
您的替代方案可以是使用session_id()作为键,在表中存储会话信息(包括当前用户ID)。
会话信息以纯文本形式存储。
根据您的设置,会话位置应该在正确设置的服务器上是安全的。可以使用session_save_path()更改位置,从而克服潜在的位置问题。
我建议不要仅将用户ID添加到会话中。例如:
1:在一个浏览器中创建帐户并登录。然后保持该浏览器打开状态,转到另一台计算机。
2:登录相同的帐户并将其删除。现在使用不同的密码(如果用户名用作ID,则使用相同的用户名)创建新帐户。
3:返回到您的其他计算机并进行操作。您会发现,您可能正在使用在其他计算机上创建的帐户。
基本上,由于会话存储了ID,因此根据账户是否更改等情况,这可能不一定仍然属于同一人。如果不需要密码(因为您已经通过拥有该帐户的过程),那么它类似于闯入。
因此,如果从数据库中删除用户帐户时可以重复使用数字ID(我见过的系统中约有2%可以这样做)。或者如果用户ID是用户名(我见过的约20%可以这样做),则似乎只有一种可能性可以实现。
因此,我建议将用户ID和密码哈希(即md5,sha1)添加到会话中,并每次使用它们获取用户信息。