【问题标题】:Can HttpOnly flag prevent session fixation attack?HttpOnly 标志可以防止会话固定攻击吗?
【发布时间】:2017-12-18 10:32:35
【问题描述】:

我需要在登录后保留会话 ID。我的会话 id cookie 被标记为 HttpOnly。这样的设置绝对安全吗?如果我的会话 cookie 是 HttpOnly,攻击者是否有可能执行会话固定攻击?

【问题讨论】:

    标签: spring security spring-security session-cookies session-fixation


    【解决方案1】:

    最好将会话 cookie 设置为 HttpOnly,因为它显然使会话更安全。

    避免会话固定漏洞的正确方法是在身份验证时为用户创建新会话。

    查看关于 session fixation 的 OWASP 文章。它包含有关执行此类攻击的技术的信息。

    【讨论】:

      【解决方案2】:

      TLDR:是的,在 PHP 和 Firefox 中,可以添加第二个会话 cookie,由于标头中的顺序,该 cookie 优先于原始的。 也可以,如果有其他功能允许在服务器上设置会话 ID。这取决于应用程序特定的功能。

      完整解释

      取决于您网站上用于操作会话的其他功能。在极少数情况下,应用程序允许用户通过 HTTP 请求设置会话。例如,通过 GET 参数。

      我相信您想知道如果原始会话 ID 设置在带有 HttpOnly 标志的 cookie 中,是否可以固定会话 ID。因此,我对一个正在进行渗透测试的 PHP 应用程序做了一个小测试。令人惊讶的是,您可以通过作为 XSS 注入的 JavaScript 设置新的 PHPSESSID。如果已经存在带有 HttpOnly 标志的 PHPSESSID cookie,它只是将这个放在另一个旁边。就我而言,在 Firefox 中,在我尝试通过 document.cookie = "PHPSESSID=FIXATEDSESSIONID" 设置 PHPSESSID 后,它向服务器发送了以下 Cookie:

      Cookie: PHPSESSID=FIXATEDSESSIONID; __utma=139474299.465096418.1547461023.1548839033.1548851774.5; __utmz=139474299.1547461023.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); acceptCookies=true; 
      

      所以现在请求中有两个会话 ID。在我的设置中,使用 PHP 5.6.25,服务器使用 first cookie 来绑定会话。因此,对于 Firefox 和 PHP 5.6.25,我能够通过 JavaScript 固定我的会话 ID (FIXATEDSESSIONID)。原始会话 ID 仍在请求中,但被服务器忽略。请注意,FIXATEDSESSIONID 实际上是我注入的会话 ID。所以没有必要从 PHP 服务器获取合法的会话 ID。

      【讨论】:

        猜你喜欢
        • 2014-02-06
        • 2020-10-03
        • 1970-01-01
        • 2015-04-08
        • 1970-01-01
        • 2014-12-07
        • 2018-03-22
        • 2012-07-04
        • 2019-02-18
        相关资源
        最近更新 更多