14

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

请分享任何想法。

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

4

3 回答 3

20

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

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

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

这是一种比使用过滤器手动破解 cookie 更好的方法。

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

于 2013-07-16T23:19:38.820 回答
1

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

JSESSIONID=ABC3423DF...SDF;HttpOnly;Secure
于 2013-04-22T13:41:23.820 回答
-2

我在 web.xml 中使用 <http-only><secure>标签来设置安全属性并且它有效。

<session-config>
 <cookie-config>
  <http-only>true</http-only>
 </cookie-config>
<session-config>
于 2017-11-16T05:23:28.573 回答