【问题标题】:httpOnly cookiehttpOnly cookie
【发布时间】:2017-11-16 14:55:47
【问题描述】:

我对部署在 jboss 5 中的应用程序(内置 struts 和 hibernate 框架)进行了网络扫描,报告“Set-cookie does not use HTTPOnly keyword. The web application does not utilize HTTPOnly cookies”。这是什么意思。我找了一些帖子,只是在我的 jboss/deploy/jbossweb.sar/context.xml 中添加了一行

<SessionCookie secure="true" useHttpOnly="true" >

设置后,我在运行应用程序时遇到错误。
是否缺少任何配置?

【问题讨论】:

    标签: jboss security httponly


    【解决方案1】:

    试试这个:

    <SessionCookie secure="true" httpOnly="true" />
    

    【讨论】:

    • 在日志中我们可以找到解析xml的错误。这是一个简单的缺少关闭标签问题
    【解决方案2】:

    什么意思

    http 响应标头中的HttpOnly 标志向浏览器指示不应允许客户端访问JSESSION_ID 或其他会话cookie 类型标识符。这是为了防止通过XSS 中的客户端脚本恶意访问会话令牌(或其他涉及从客户端劫持会话的攻击)。目前几乎所有主流浏览器都支持这个标志(支持浏览器请参阅this list),但在不支持它的浏览器中它会被忽略。在OWASP site 上查看更多信息

    通过在上下文文件中包含以下内容,对 tomcat 及其分支(包括 Jboss)的设置类似:

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

     <SessionCookie secure="true" httpOnly="true" />
    

    【讨论】:

    • 除了在我的jboss中配置这个之外,应用程序中是否需要任何配置?
    • @bablu,需要吗?不。但是您可以配置一个 servlet 过滤器以在应用程序的每个 http 响应中插入此标头,作为故障保护,而不是必需
    • 在servlet过滤器代码中,我不得不添加 String sessionid = request.getSession().getId(); response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; HttpOnly");否则 request.getSession(false) 总是返回 null。我不知道为什么,但是在添加了那几行之后,应用程序运行成功。所以我的疑问是 - 绝对需要这 2 行。我从owasp.org/index.php/HttpOnly 站点得到的这两条线。这里提到,对于 servlet 版本
    • @bablu,对不起,我以某种方式假设您在 JEE 平台上。您是对的,对于早期的(J2EE)容器,您需要以编程方式重写标头。对 httponly 的原生支持是在 servlet 3.0 中引入的。相应地更新我的答案
    • 当心!首先,有一些方法可以绕过它(即带有调试 http 连接的 java 小程序;))。其次,如果您在过滤器中将其应用于每个请求“/ *”,您的小程序将无法工作,因为在类加载时响应 set-cookie 标头。
    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 2012-06-07
    • 2017-05-01
    • 2011-09-28
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    相关资源
    最近更新 更多