php在会话中存储用户ID?

时间:2011-04-20 00:47:22

标签: php security session

我想知道在会话中存储用户ID的风险是什么?

然后简单地做一个

if(isset($_SESSION['user_id'])){
  login_user($_SESSION['user_id]);
}

会话是否足够加密,我们不必担心散列它们? 有人能够更改身份证的可能性有多大?

5 个答案:

答案 0 :(得分:11)

会话默认存储在/tmp中作为文件。除非您遇到directory traversal漏洞等安全问题,否则最终用户无法查看。

客户端看到的唯一部分是存储在cookie中的唯一哈希,该哈希映射到服务器上的相关会话。

答案 1 :(得分:2)

大多数应用程序都使用$_SESSION。如果存在广泛的弱点,那么主要项目将以不同的方式做事。

答案 2 :(得分:1)

在$ _SESSION中存储用户ID是一种相当普遍的做法。

您可以选择使用某种形式的session_id()将会话信息(包括当前用户ID)存储在表中作为密钥。

会话信息以纯文本格式存储。

根据您的设置,会话位置在正确设置的服务器上应该是安全的。可以使用session_save_path()更改位置,这将克服潜在的位置问题。

答案 3 :(得分:0)

如果有人可以访问您的会话,他可能会访问更多内容。我不会哈希它,也确保它不会到达客户端

答案 4 :(得分:-2)

我建议不要只在会话中添加用户ID。例如:

1:在一个浏览器中创建一个帐户并登录。然后打开该浏览器并转到另一台计算机。

2:登录同一帐户并将其删除。现在使用不同的密码创建一个新帐户(如果用作id,则使用相同的用户名)。

3:回到你的另一台电脑做一些事情。您会发现现在很可能正在使用在另一台计算机上创建的帐户。

基本上,由于会话存储了id,这可能不一定属于同一个人,具体取决于iff帐户是否已更改等。如果不需要密码(因为您在拥有帐户时已经通过了该过程),那么它类似于闯入。

因此,当您从数据库中删除用户帐户时,数字ID可以重复使用(我见过的系统中约有2%执行此操作),这似乎只有工作机会。或者,如果用户ID是用户名(我见过大约20%)。

所以我建议将sessionid和密码哈希值(即md5,sha1)添加到会话中,并每次使用它们获取用户信息。