【问题标题】:how to set httponly and session cookie for java web application如何为 java web 应用程序设置 httponly 和 session cookie
【发布时间】:2016-10-07 01:06:45
【问题描述】:

我正在处理 XSS(跨站点脚本)问题。我的应用程序在 Oracle Weblogic 门户上运行。我们使用 Servlet 2.5 版。

我在过滤器中添加了以下 3 行代码,用于设置 httponly 和安全 cookie, 它工作正常。

String sessionid = req.getSession().getId();
res.setHeader("Set-Cookie", "JSESSIONID=" +  sessionid + ";HttpOnly");
res.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; secure");

问题是当我注销并立即在同一个浏览器中登录时。我可以登录,但在那之后,在 jsp 页面上我遇到了会话超时问题。我们使用weblogic相关的api。 request.getuserprinical() api 正在返回 null.. 猜测它设置为 null。

请分享任何想法。

如果有其他方法可以设置 httponly 或安全标志,请帮助。

【问题讨论】:

    标签: java security xss httponly


    【解决方案1】:

    您需要使用以下语法来设置 httponly 和 Secure 标志

    JSESSIONID=ABC3423DF...SDF;HttpOnly;Secure
    

    【讨论】:

      【解决方案2】:

      根据您的 Web 容器的具体情况,在应用中修改容器管理的会话 cookie 可能会导致应用服务器丢弃现有会话并创建一个新会话。我在 Tomcat 上观察到了这一点,但对于 Weblogic 来说可能类似。

      如果您使用的是 Servlets 3.0,您实际上可以通过以下片段指示应用服务器确保所有会话 cookie 都是 HttpOnly 和安全的:

      <session-config>
        <cookie-config>
          <secure>true</secure>
          <http-only>true</http-only>
        </cookie-config>
      </session-config>
      

      这比使用过滤器手动破解 cookie 更好。

      仅供参考:我还编写了一个Java library,它在基于 Servlet 的应用程序中注入了许多与安全相关的响应标头。

      【讨论】:

      • 你能检查一下这个问题杰森吗? stackoverflow.com/questions/28341645/…我认为你可以帮上大忙,它与这个问题有相似之处:)
      • 我必须交换 行,否则 web.xml 将无效。
      【解决方案3】:

      我在 web.xml 中使用了&lt;http-only&gt;&lt;secure&gt; 标记来设置安全属性,并且成功了。

      <session-config>
       <cookie-config>
        <http-only>true</http-only>
       </cookie-config>
      <session-config>
      

      【讨论】:

        猜你喜欢
        • 2016-04-02
        • 1970-01-01
        • 2017-01-30
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        • 1970-01-01
        相关资源
        最近更新 更多