了解安全/httponly cookie 如何用于 Java 应用程序

Posted

技术标签:

【中文标题】了解安全/httponly cookie 如何用于 Java 应用程序【英文标题】:Undestanding how secure/httponly cookie works for java applications 【发布时间】:2015-06-30 05:11:28 【问题描述】:

由于我目前对此的理解程度,我的行为只能被归为怪异。

我在 Ubuntu 上安装了 apache 版本:2.4.7,通过 AJP 1.3 tomcat 7.0.52.0 运行 Spring 应用程序 (MVC),并将 apache shiro 1.2 作为安全框架。

我在 apache2.conf 中设置了 headers 条目,如下所示

Header always append X-Frame-Options SAMEORIGIN
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

如果使用以下任一或所有方法在 tomcat 端强制执行标志,我的行为完全相同:

conf/context.xml 带有上下文标签的 useHttpOnly="true" 属性 conf/server.xml 带有 ajp 或 http 的 secure="true" 属性

使用以下连接器 WEB-INF/web.xml

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

在此之后发生的事情是,/login 有一个安全和 httponly 标志,在身份验证成功后,所有这些标志在应用程序中消失,在对服务器的任何调用过程中。用户注销后,标志会在 jsessionid 和 RememberMe 上返回一个额外的标志:DeleteMe

这个 /login 页面创建带有安全和 httponly 标志的 jsessionid

当认证成功时,两步认证 jsessionid 没有标志

在帐户仪表板中也没有标记

但是在注销时标志又回来了

我的问题是

1:这是通常的行为吗2:如果这是实际行为,这是否意味着 cookie 在会话 ID 的整个生命周期内都是安全的?

【问题讨论】:

【参考方案1】:

这不是通常的行为/观察,因为这些标志不适用于发送到服务器以维护状态的Cookie 请求标头。接收到的值由客户端使用,但不由客户端传输。您被那个显示Cookie 标头列的诊断界面误导了。 Set-CookieCookie 这样不对称。

判断您的非浏览器客户端是否遵守“安全”设置的唯一方法是诱使它向 cookie 中指定的相同域/路径发送非 HTTPS 请求,并观察它是否忽略了先前设置的 cookie作为 SECURE。

【讨论】:

感谢您的回答。我希望您可以参考一些权威资源或对答案的第二段进行详细说明,

以上是关于了解安全/httponly cookie 如何用于 Java 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何将会话 cookie 的 HttpOnly 设置为 false?

如何获取 httpOnly(安全)cookie TestCafe?

如何使用 JavaScript 读取 HttpOnly cookie

使用HttpOnly提升Cookie安全性

HttpOnly 与cookie安全

在Python的Flask中设置HTTPONLY Cookie [重复]