如何为Java Web应用程序的HttpOnly和会话cookie(how to set httpo

2019-07-22 00:57发布

你好我工作的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。

任何想法,请分享。

如果有任何其他的方式来设置的HttpOnly或安全标志,请帮助。

Answer 1:

根据您的Web容器的具体情况,修改应用程序中的容器管理的会话cookie可能会导致应用服务器折腾现有的会话,并创建一个新的。 我观察到这个Tomcat上,但它可能是Weblogic的相似。

如果您使用的Servlet 3.0,你其实可以指示应用服务器,以确保所有的会话cookie都仅Http和安全具有以下片段:

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

这比上带滤波器的手工饼干黑客的更好方法。

FYI:我也写一个Java库 :注射一些在基于Servlet应用与安全相关的响应头。



Answer 2:

您需要使用以下语法设置都仅Http和securu标志

JSESSIONID=ABC3423DF...SDF;HttpOnly;Secure


Answer 3:

我已经使用<http-only><secure>在web.xml中的标签设置安全属性和它的工作。

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


文章来源: how to set httponly and session cookie for java web application