【问题标题】:Can a user alter the value of $_SESSION in PHP?用户可以在 PHP 中更改 $_SESSION 的值吗?
【发布时间】:2011-07-04 13:16:54
【问题描述】:

这是我的想法,我想知道是否有可能,将信息存储在 PHP 的 $_SESSION 变量中有多安全?

【问题讨论】:

    标签: php session


    【解决方案1】:

    PHP Session 的工作方式是在最终用户的计算机上存储一个PHPSESSID cookie,作为基于服务器的会话信息的访问密钥。该 cookie 值是一个散列字符串(其安全性取决于您的 PHP 设置),用于将特定浏览器链接到您设置的特定会话值。

    那个字符串看起来像b420803490a9f0fe8d6a80657fec3160。因此,最终用户可以更改该字符串,但随后他们的会话将变为无效,因为它几乎肯定不会与 PHP 存储的字符串匹配,并且他们将无法访问数据。

    正如其他人所提到的,存在风险,即某人的PHPSESSID 被暴露,人们使用它来劫持其他人的会话。

    【讨论】:

      【解决方案2】:

      在 $_SESSION 变量中存储变量有两种潜在的“不安全性”。

      • 另一个答案所描述的第一个称为“会话固定”。这里的想法是,由于会话 ID 存储在 cookie 中,因此可以将 ID 更改为其他用户的 ID。如果用户在每个会话中都获得一个新 ID,这不是问题,因此很难找到当前工作会话的 ID 并劫持它。
      • 第二个完全取决于您的代码。如果您的代码泄露了您存储在 $_SESSION 中的秘密信息的值,那么它就是不安全的。如果您的代码允许用户控制该信息的值,则它是不安全的。否则,如果 $_SESSION 变量中有某些内容并且您的代码永远不允许用户查看或写入它,那么它是安全的。

      【讨论】:

      • +1 因为这[是迄今为止唯一的回应]解决了不安全编码允许的漏洞。
      • 泄漏类似于Hello, $_SESSION['username'], your password is $_SESSION['password']。会话数据保存在服务器上,除非您通过代码明确输出其中的任何部分,否则远程用户永远无法查看。
      • @MarcB 我很好奇,您是否建议完全避免使用 $_SESSION['info'] 来显示 HTML 中的内容,或者只是避免显示关键信息,例如您的示例中的密码?跨度>
      • @jish:取决于您在会话中存储的内容,以及在会话中后如何处理它。
      • 第二种情况下的会话漏洞(让用户控制会话变量值)是否意味着从用户输入或通过 js 获取 HTML 元素?
      【解决方案3】:

      $_COOKIES 在客户端计算机上的安全性较低,$_SESSION 存储在服务器上。它的位置由 php.ini 的session.save_path 确定。但是仍然存在session fixation等安全问题

      【讨论】:

        【解决方案4】:

        $_SESSION 完全存储在服务器上,因此用户无法修改它。但是,会话劫持攻击可能会导致用户连接到另一个用户的会话。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-17
          • 2011-11-19
          • 1970-01-01
          • 1970-01-01
          • 2011-10-18
          • 1970-01-01
          • 2012-06-07
          相关资源
          最近更新 更多