how to set httponly and session cookie for java web application
我正在研究XSS(跨站点脚本)问题。 我的应用程序在Oracle Weblogic门户上运行。 我们使用Servlet 2.5版。
我在过滤器中添加了以下3行代码,用于设置httponly和安全cookie,
而且工作正常。
1 2 3 | String sessionid = req.getSession().getId(); res.setHeader("Set-Cookie","JSESSIONID=" + sessionid +";HttpOnly"); res.setHeader("SET-COOKIE","JSESSIONID=" + sessionid +"; secure"); |
问题是当我注销并立即在同一浏览器中登录时。 我可以登录,但是之后,在jsp页面上我遇到了会话超时问题。 我们使用与Weblogic相关的API。
请分享任何想法。
如果还有其他设置httponly或安全标志的方法,请提供帮助。
根据您的Web容器的具体情况,在应用程序中修改容器管理的会话cookie可能导致应用程序服务器抛弃现有会话并创建一个新会话。 我已经在Tomcat上观察到了这一点,但对于Weblogic来说可能相似。
如果您使用的是Servlets 3.0,则实际上可以指示应用服务器确保所有会话cookie都是HttpOnly和Secure,并带有以下片段:
1 2 3 4 5 6 | <session-config> <cookie-config> <secure>true</secure> <http-only>true</http-only> </cookie-config> </session-config> |
与使用过滤器手动修改Cookie相比,这是一种更好的方法。
仅供参考:我还写了一个Java库,在基于Servlet的应用程序中注入了许多与安全性相关的响应标头。
您需要使用以下语法来设置httponly和Secure标志
1 | JSESSIONID=ABC3423DF...SDF;HttpOnly;Secure |
我在web.xml中使用了
1 2 3 4 5 | <session-config> <cookie-config> <http-only>true</http-only> </cookie-config> <session-config> |