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

Kir*_*ran 13 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");
Run Code Online (Sandbox Code Playgroud)

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

任何想法请分享.

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

Jas*_*ols 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>
Run Code Online (Sandbox Code Playgroud)

这是一种比使用过滤器手动黑客攻击cookie更好的方法.

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