从不同路径中检索cookie

18

我的当前文档URL是http://127.0.0.1/foo,我需要更改http://127.0.0.1/bar的cookie值。由于文档的URL是foo,因此document.cookie为空。目前,我只想读取cookie值。有什么提示吗?

4个回答

24

如果将路径设置为'/'而不是'foo',则创建cookie时可以在域中的任何地方读取它,包括'/foo'、'/bar'等。


我无法更改cookie的创建和路径。这意味着无法从foo访问bar的cookie吗? - Guid
这不是一个很大的安全问题,因为cookie本身并没有得到真正的保护。由于SOP忽略路径,cookie路径并不能成为有意义的安全屏障。 - Antimony

16

您可以创建一个指向/bar内资源的<iframe>,并进行跨框架脚本编写,例如:

<iframe src="/bar/blank.html" id="barframe"></iframe>

var barframe= document.getElementById('barframe');
var bardocument= 'contentDocument' in barframe? barframe.contentDocument : barframe.contentWindow.document; // IE compat
alert(bardocument.cookie);

Cookie path= 是为了防止Cookie名称冲突而采取的便利措施。鉴于不同路径共享JavaScript来源,它并不是一种有效的安全机制。


3
感谢您指出cookie路径并非有意义的安全屏障。+1 - Antimony
1
路径是一项性能特性,而不是安全特性... 我错过了"barframe.contentDocument"部分。非常感谢。我给你点赞。 - Iliya Kolev

4

你不能从不同的路径访问cookie,否则这将是一个安全漏洞。

我所能想到的唯一方法是让/bar设置一个cookie,其path=/,以便所有位于/(包括/foo)中的页面都可以访问它。


4
如JJ和grawity所提到的,你无法在你的页面中完成这个任务。但是,你可以使用一个变通方法。
i. 在 "foo" 页面上放置一个指向 http://localhost/bar 的 iframe。在 "bar" 页面上有一个隐藏元素,用于存储 cookie 值。(让这个 iframe 大小为1*1,这样它就不可见)。
ii. 在 "foo" 页面上使用 JavaScript 来获取 cookie 值。
类似的方法(带有修改)也可以用来写入 cookie 值!
谢谢,
Ramjee.

2
这样做不会让任何人在互联网上获取cookie吗? - Antimony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接