JavaScript和第三方cookie

JavaScript和第三方cookie,javascript,cookies,cross-domain,Javascript,Cookies,Cross Domain,假设有一个站点foo.com,它从站点bar.com加载JavaScript。现在,假设来自站点bar.com的JavaScript尝试使用document.cookies读取cookies。我的印象是,使用JavaScript,您可以读取浏览器中设置的所有cookie,而不考虑它们的来源。但事实证明,来自网站bar.com的JavaScript只能访问bar.com设置的cookies,而不能访问任何其他cookies。如果是这种情况,那么窃取cookie的脚本注入攻击是如何执行的?它们将脚本

假设有一个站点
foo.com
,它从站点
bar.com
加载JavaScript。现在,假设来自站点
bar.com
的JavaScript尝试使用
document.cookies
读取cookies。我的印象是,使用JavaScript,您可以读取浏览器中设置的所有cookie,而不考虑它们的来源。但事实证明,来自网站
bar.com
的JavaScript只能访问
bar.com
设置的cookies,而不能访问任何其他cookies。如果是这种情况,那么窃取cookie的脚本注入攻击是如何执行的?

它们将脚本加载到受攻击的页面中

例如,当博客系统中的评论遭到破坏时,它们包含一个
脚本
元素,在呈现页面时执行该元素。此脚本可以获取cookie并将其发送到攻击者的服务器

这就是为什么你应该永远不信任用户输入,并且在评论中至少禁止某些标记(或翻译每个

但事实证明,来自网站bar.com的JavaScript只能访问bar.com设置的cookies,而不能访问任何其他cookies

那不是真的。重要的是包含
元素的HTML文档在哪里,而不是说
在src属性中提到的JS文件的URL


我怀疑您的问题是,当属性名为
document.cookie
时,您正在访问
document.cookies
单数!

您只能访问为给定域名设置的cookies。从:

在名称/值对旁边,有一个cookie 还可能包含到期日期、有效期 路径、域名以及 cookie仅用于加密 连接。RFC 2965 有一个版本号,但这是 通常省略。这些数据段 遵循name=newvalue对,并且是 用分号分隔。例如, 服务器可以创建cookie 通过发送行集Cookie: name=newvalue;expires=date;path=/; domain=.example.org

域和 路径告诉浏览器cookie 必须在 请求给定域的URL和 路径。如果未指定,则默认为 指向对象的域和路径 这是被要求的。因此 域和路径字符串可能会告诉 浏览器发送cookie时 通常不会。为了安全起见 原因,cookie仅被接受 如果服务器是 由域字符串指定的域


如果
foo.com
发送了一个域名为
bar.com
的cookie,或者甚至
.com
,那么
bar.com
上的JavaSCript代码可以读取该cookie。但是大多数浏览器配置为仅在域名匹配时接受cookie,并且会拒绝这样的cookie。

CDN也是这样工作的,就像此网站上加载的jQuery脚本:
http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
不在域
stackoverflow.com
@David上,键入问题时cookie的东西是拼写错误。我刚才尝试使用警报(document.cookie)尽管设置了cookie,我还是得到了一个空白字符串。我很困惑。我执行了一个测试。域没有什么不同。也许您试图获取的cookie位于不同的路径上,或者设置为仅HTTP。Cooke不仅仅是HTTP。Site foo.com包含来自Site moo.bar.com的脚本,cookie设置为domain bar.com(不是moo.bar.com)路径为/。这是我正在测试的场景,我无法读取cookies.Oops。明白了。在cookie窃取中,情况正好相反。来自位于foo.com的bar.com的脚本尝试从foo.com本身而不是从bar.com读取cookies。谢谢。堵塞了我理解中的漏洞。我验证了cookie是否存在,但没有vaScript无法读取它。