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

我正在研究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或安全标志的方法,请提供帮助。

回答:

根据您的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>

与使用过滤器手动修改Cookie相比,这是一种更好的方法。

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

以上是 如何为Java Web应用程序设置httponly和会话cookie 的全部内容, 来源链接: utcz.com/qa/429662.html

回到顶部