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无法读取它。