【问题标题】:Cookie automatically becomes httpOnlyCookie 自动变为 httpOnly
【发布时间】:2019-11-15 05:58:37
【问题描述】:

我在 WebSphere 上的上下文根 /app 上部署了一个 Web 应用程序。在应用程序内部,有一个 javascript 在加载后立即执行,它看起来像这样:

document.cookie = "foo=bar; path=/app";

setTimeout(function () {
    document.cookie = "baz=qux; path=/app";
}, 1000);

Chrome 行为

从 DevTools 中我可以看到,最初 foo=bar 被创建为 non-httpOnly,1-2 秒后它自动变为 httpOnly。 等待 5 秒左右(只是为了确保)后,第二个 cookie 也被创建了,但在非 httpOnly 模式下,最终结果如下所示:

foo=bar (httpOnly=true)
baz=qux (httpOnly=false)

Q1:为什么 foo=bar 会在一段时间后变成 httpOnly?

Q2:为什么延迟创建 cookie 会产生如此大的影响?

我可以说阈值在 700-800 毫秒之间,如果我延迟 cookie 创建的时间小于这个值,它的行为就完全没有延迟。

Firefox 行为

这里在延迟低于阈值的情况下(或没有任何 setTimeout) 它会为每个 kay,value 对创建 2 个 cookie,例如:

foo=bar; path=/app  (httpOnly=false)
foo=bar; path=/app/ (httpOnly=true)
baz=qux; path=/app  (httpOnly=false)
baz=qux; path=/app/ (httpOnly=true)

而在延迟高于阈值的情况下,它不会创建重复的 cookie(对于 baz=qux):

foo=bar; path=/app  (httpOnly=false)
foo=bar; path=/app/ (httpOnly=true)
baz=qux; path=/app  (httpOnly=false)

Q3:不说FF为什么会在末尾附加斜线(我听说不同的浏览器对cookie的处理方式不同),为什么延迟cookie的创建不是这样?

我什至认为可能在应用程序的某个地方有一段脚本,一段时间后它会将非 httpOnly cookie “覆盖”为 httpOnly 一个,但我不认为是这种情况,因为从控制台执行它确实不改变任何东西:

document.cookie="baz=qux; path=/app; HttpOnly"

即baz=qux 保持为非 httpOnly。甚至有人声称它是not possible

这不是服务器通过响应将 cookie 重置为 httpOnly 的事情,我已经在网络视图中检查了每个请求,并且这些 cookie 不是来自服务器。

我有一种直觉,在这个环境中肯定有一些东西,因为我尝试创建一个具有类似设置的单独 Spring boot 项目,并且所有 cookie 都保持非 httpOnly。

有什么想法吗?不幸的是,我无法分享真实的代码。如果有人能够至少从理论上解释可能是什么原因,那将非常有帮助。

其他说明:

  • 这不适用于使用 path=/ 创建的 cookie
  • Chrome 版本:75.0.3770.100
  • 火狐版本:67.0.4
  • 我正在使用不带任何扩展程序的隐身窗口

【问题讨论】:

    标签: google-chrome firefox cookies httponly cookie-httponly


    【解决方案1】:

    好的,经过进一步挖掘,我想我找到了解释

    这不是服务器将 cookie 重置为 httpOnly 的事情 响应,我已经检查了网络视图中的每个请求,并且 这些 cookie 不是来自服务器。

    这并不完全正确,显然,WebSphere 发回了设置了 httpOnly 标志的 cookie,这可能是由于 HTTPOnly flag。但是,它并不总是在 Chrome/Firefox DevTools 网络视图中可见。我记得只有一个案例(几十个)是可见的。不知道为什么浏览器没有一致地显示它(即使是硬刷新)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 2019-08-03
      • 2012-06-07
      • 1970-01-01
      • 2017-02-04
      • 2016-06-04
      • 2017-01-30
      相关资源
      最近更新 更多