我在上下文根WebSphere上部署了一个web应用程序。在应用程序中,有一个javascript在加载后立即执行,它看起来如下所示:
document.cookie = "foo=bar; path=/app";
setTimeout(function () {
document.cookie = "baz=qux; path=/app";
}, 1000);铬行为
从DevTools中我可以看到,最初foo=bar是以non--httpOnly的形式创建的,1-2秒后它自动变成httpOnly。在等待了大约5秒后(只是为了确保),也创建了第二个cookie,但是在非httpOnly模式下,最后的结果如下所示:
foo=bar (httpOnly=true)
baz=qux (httpOnly=false)Q1:为什么foo=bar会在一段时间后变成httpOnly?
Q2:为什么这种延迟的饼干创建会产生如此大的差异?
我可以说阈值在700到800毫秒之间,如果我延迟创建低于这个值的cookie,那么它的行为完全是没有延迟的。
Firefox行为
在这里,如果延迟低于阈值(或没有任何setTimeout),它将为每个kay创建2个cookies,值对,例如:
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 one,但我不认为是这样的,因为从控制台执行它不会改变任何事情:
document.cookie="baz=qux; path=/app; HttpOnly"也就是说,baz=qux仍然是非httpOnly。有些人甚至声称这是不可能
服务器通过响应将cookie重置为httpOnly并不是一件事,我检查了网络视图中的每个请求,并且这些cookie不是来自服务器。
我有一种直觉,认为在这个环境中一定有一些东西,因为我试图用类似的设置创建一个单独的Spring引导项目,而所有的cookie都是非httpOnly的。
有什么想法吗?不幸的是,我不能分享真正的代码。如果有人能至少从理论上解释原因,那将是非常有帮助的。
其他注释:
发布于 2019-07-29 08:17:26
好吧,经过进一步的调查,我想我找到了解释
服务器通过响应将cookie重置为httpOnly并不是一件事,我检查了网络视图中的每个请求,并且这些cookie不是来自服务器。
这并不是完全正确的,显然,WebSphere是用httpOnly标志返回cookie的,这可能是HTTPOnly标志造成的。然而,在Chrome/Firefox DevTools网络视图中并不总是可见。我只记得只有一个案例(在几十个)时,这是可见的。不知道为什么浏览器没有一致地显示它(即使是硬刷新)。
https://stackoverflow.com/questions/56888845
复制相似问题