Javascript 可以覆盖 HTTPOnly cookie 吗?

信息安全 饼干 网络
2021-08-16 08:19:27

Javascript 可以覆盖或删除 HTTPOnly cookie 吗?

更详细地说:假设用户的浏览器有一个example.com设置了 HTTPOnly 标志的 cookie,比如说session=552..e0假设用户访问 上的页面example.com在该页面上运行的 Javascript 是否可以使用未设置 HTTPOnly cookie 标志的新 cookie 覆盖 cookie?这会有效地删除现有的 HTTPOnly cookie吗?我可以指望浏览器来防止这种情况吗?


我做过的研究:谷歌浏览器安全手册

没有特别考虑防止 JavaScript 覆盖 httponly cookie

但我知道这些页面现在已经很老了,而且那句话并没有完全明确地说明什么是可能的。同一页上的表格显示,在 MSIE、Firefox 3、Opera 和 Chrome 上,Javascript 无法覆盖 HTTPOnly cookie,但 Safari 和 Android 浏览器可以——但同样,这是一个非常古老的资源。 Mozilla 的文档在这一点上并不清楚。

1个回答

虽然您可能无法重写 cookie,但您可能可以隐藏它。具体行为取决于浏览器。使用 Firefox,我可以设置站点全局 HttpOnly cookiepath=/和具有不同路径的 JavaScript cookie。如果我访问这条路径,那么我会得到两个 cookie:

# In server response
Set-Cookie: Foo=http; HttpOnly; Path=/

# In document script
document.cookie = "Foo=js; path=/f;"

# Request when visiting path /f
Cookie: Foo=js; Foo=http;

在 Chrome 中,尽管它在请求中仅显示一个 cookie,即带有 HttpOnly 标志的 cookie。它在本地存储了另一个 cookie,并且可以使用 JavaScript 访问它。

有关这方面的更多信息,另请参阅Cookies Lack Integrity: Real-World Implications from Usenix 2015。尽管浏览器可能同时改变了它们的行为,但那里的发现可能不再完全正确。