了解 secure/httponly cookie 如何为 java 应用程序工作

Undestanding how secure/httponly cookie works for java applications

我一直有一种行为,由于我目前对此的理解水平,我只能称之为怪异。

我有 apache 版本:2.4.7 on Ubuntu 通过 AJP 1.3 代理 tomcat 7.0.52.0 运行 带有 apache shiro 1.2 的 spring 应用程序 (MVC)作为安全框架。

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

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

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

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

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

当身份验证成功时,2 步 auth jsessionid 没有标志

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

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

不过我的问题是

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

这不常见 behavior/observation,因为这些标志不适用于 Cookie 发送到服务器的请求 header保持状态。接收到的值由客户端使用,但不由客户端传输。您被显示 Cookie header 列的诊断界面误导了。 Set-CookieCookie 这样不对称。

判断您的 non-browser 客户端是否支持 "SECURE" 设置的唯一方法是诱使它发送一个 non-HTTPS 请求到在cookie 并观察它是否省略了之前设置为安全的 cookie。