如何为java Web应用程序设置httponly和会话cookie

时间:2013-03-19 21:01:52

标签: java security xss httponly

您好我正在处理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相关的apis。 request.getuserprinical()api返回null ..猜它设置为null。

任何想法请分享。

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

3 个答案:

答案 0 :(得分:20)

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

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

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

这比使用过滤器手动黑客攻击更好。

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

答案 1 :(得分:1)

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

JSESSIONID=ABC3423DF...SDF;HttpOnly;Secure

答案 2 :(得分:-1)

我在web.xml中使用了<http-only><secure>标记来设置安全属性,但它确实有效。

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