【问题标题】:php storing user id in session?php在会话中存储用户ID?
【发布时间】: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 已存储,并进行了一些快速(和错误)的心理飞跃。谢谢你的收获

标签: php security session


【解决方案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 是自动递增的主列(为什么不是?)那么这不会发生..
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多