了解安全/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-Cookie
和 Cookie
这样不对称。
判断您的非浏览器客户端是否遵守“安全”设置的唯一方法是诱使它向 cookie 中指定的相同域/路径发送非 HTTPS 请求,并观察它是否忽略了先前设置的 cookie作为 SECURE。
【讨论】:
感谢您的回答。我希望您可以参考一些权威资源或对答案的第二段进行详细说明,以上是关于了解安全/httponly cookie 如何用于 Java 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何将会话 cookie 的 HttpOnly 设置为 false?
如何获取 httpOnly(安全)cookie TestCafe?