php在会话中存储用户ID?

Posted

技术标签:

【中文标题】php在会话中存储用户ID?【英文标题】:php storing user id in session? 【发布时间】:2011-08-09 03:00:38 【问题描述】:

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

然后简单地做一个

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

会话是否足够加密以至于我们不必担心对它们进行哈希处理? 有人能够更改其 ID 的可能性有多大?

【问题讨论】:

值得注意的是,如果用户有合适的插件(我使用 Web Developer for Firefox),他们可以看到他们自己的会话信息。此外,您在 login_user 调用中缺少第二个 ' @DaOgre Session info !== cookie info 非常好@deceze。我快速检查并看到会话 ID 已存储,并进行了一些快速(和错误)的心理飞跃。谢谢你的收获 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

如果有人可以访问您的会话,他可能可以访问更多。我不会散列它并确保它不会到达客户端

【讨论】:

【参考方案3】:

大多数应用程序都像您一样使用$_SESSION。如果存在广泛的弱点,那么主要项目将采取不同的做法。

【讨论】:

【参考方案4】:

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

您的替代方法是使用 session_id() 以某种形式作为键将会话信息(包括当前用户 ID)存储在表中。

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

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

【讨论】:

【参考方案5】:

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

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

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

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

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

所以这似乎只有当你从数据库中删除用户帐户时,数字 id 可以被重用(我见过的大约 2% 的系统这样做)时才有可能工作。或者如果用户 id 是用户名(我见过大约 20% 的人这样做)。

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

【讨论】:

除非你有一个糟糕的程序员为你工作,否则你的情况永远不会发生。 如果您的用户 ID 是自动递增的主列(为什么不是?)那么这不会发生..

以上是关于php在会话中存储用户ID?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 会话的安全性如何?

PHP Sessions

强制用户注销会话 PHP

使用 Play 缓存 API 存储用户会话 ID?

Laravel 4.2 将用户 ID 存储在会话数据中的啥位置?

PHP 7 用户会话问题 - 无法初始化存储模块