【问题标题】:HttpOnly cookies on Tomcat 5.5.36Tomcat 5.5.36 上的 HttpOnly cookie
【发布时间】:2012-10-14 22:05:54
【问题描述】:

我在线程 How do you configure HttpOnly cookies in tomcat / java webapps? 上看到 Tomcat 5.5.(>28) 应该支持在 <Context> 元素中指定的供应商特定的 useHttpOnly 属性。

我将此属性添加到我的 server.xml 中配置的所有上下文中。

但是,只有JSESSIONID 附加了"; httpOnly" 标志。所有其他 cookie 与我添加 useHttpOnly="true" 之前的完全相同。

Set-Cookie=
JSESSIONID=25E8F...; Path=/custompath; HttpOnly
mycustomcookie1=xxxxxxx; Path=/
mycustomcookie2=1351101062602; Path=/
mycustomcookie3=0; Path=/
mycustomcookie4=1; Path=/; Secure
mycustomcookie5=4000; Expires=Sat, 22-Oct-2022 17:51:02 GMT; Path=/

我还有什么需要改变的吗?

(升级到 tomcat 6 或 7 暂时不是一个选项。我们的系统使用基于 tomcat 5.5 的第三方框架)

【问题讨论】:

    标签: java tomcat cookies tomcat5.5 httponly


    【解决方案1】:

    服务器中的useHttpOnly 配置确实适用于服务器控制的cookie,例如仅JSESSIONID。

    对于 webapp 控制的 cookie,您必须自己手动创建整个 cookie 标头。 Cookie 类不适合,因为 setHttpOnly() 方法是在 Servlet 3.0 中引入的,但是您使用的是 Tomcat 5.5,因为作为 Servlet 2.4 容器在 Cookie 类中没有此方法。您需要至少升级到 Tomcat 7,它是与 Servlet 3.0 兼容的容器。

    您可以手动创建问题中提到的 cookie,如下所示:

    response.addHeader("Set-Cookie", "mycustomcookie1=xxxxxxx; Path=/; HttpOnly");
    response.addHeader("Set-Cookie", "mycustomcookie2=1351101062602; Path=/; HttpOnly");
    response.addHeader("Set-Cookie", "mycustomcookie3=0; Path=/; HttpOnly");
    response.addHeader("Set-Cookie", "mycustomcookie4=1; Path=/; Secure; HttpOnly");
    response.addHeader("Set-Cookie", "mycustomcookie5=4000; Expires=Sat, 22-Oct-2022 17:51:02 GMT; Path=/; HttpOnly");
    

    确实只是将HttpOnly 属性添加到cookie 标头值中,用; 分隔。

    如果您想在 所有 cookie 上透明地应用此功能,那么您可能需要提供自定义 HttpServletResponseWrapper,其中 addHeader() 和 setHeader() 方法被相应地覆盖以检查如果设置了Set-Cookie 标头,如果设置了,则在不存在时将;HttpOnly 添加到值中。这样你就可以继续使用addCookie()。

    【讨论】:

    • 对此感到难过...我希望有某种配置可以将其全局应用于服务器。我不想把我的代码从response.addCookie(cookie) 更改为response.addHeader(...) 并手动创建cookie。即使我有一个 servlet 3.0 容器,为每个创建的 cookie 调用 setHttpOnly() 也会很痛苦。 :( 我会尝试HttpServletResponseWrapper 的想法。
    • 你在处理这么多 cookie 吗?您的代码可能还需要一些重构:)
    • 他们并不多。其中大约 12 个。问题是代码使用了 Cookie 类设施,例如安全、过期路径等。如果我将代码更改为使用 addHeader,我需要自己处理所有事情。另外,代码不是我的,我在处理一些东西,至少有 4 年了。
    猜你喜欢
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 2012-06-07
    • 2013-04-02
    相关资源
    最近更新 更多