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

嗨,我正在研究XSS(跨站脚本)问题。 我的应用程序在oracle weblogic门户上开发。 我们使用Servlet 2.5版本。

我在filter中添加了以下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或安全标志请帮助。

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

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

   true true   

这是一种比使用filter手动黑客攻击cookie更好的方法。

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

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

 JSESSIONID=ABC3423DF...SDF;HttpOnly;Secure 

我在web.xml中使用了标记来设置安全属性并且它有效。

   true