您好我正在处理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相关的apis。 request.getuserprinical()api返回null ..猜它设置为null。
任何想法请分享。
如果有任何其他方式设置httponly或安全标志请帮助。
答案 0 :(得分: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>
这比使用过滤器手动黑客攻击更好。
仅供参考:我还写了一个Java library,它在基于Servlet的应用程序中注入了许多与安全相关的响应头。
答案 1 :(得分:1)
您需要使用以下语法来设置httponly和securu标志
JSESSIONID=ABC3423DF...SDF;HttpOnly;Secure
答案 2 :(得分:-1)
我在web.xml中使用了<http-only>
和<secure>
标记来设置安全属性,但它确实有效。
<session-config>
<cookie-config>
<http-only>true</http-only>
</cookie-config>
<session-config>