JavaScript和第三方cookie

12
假设有一个名为foo.com的网站从bar.com网站加载JavaScript。现在,假设bar.com的JavaScript尝试使用document.cookies读取cookie。我原以为使用JavaScript可以读取浏览器中设置的所有cookie,无论其来源如何。但实际上,来自bar.com网站的JavaScript只能访问由bar.com设置的cookie,而不能访问其他任何cookie。如果是这样,那么如何进行窃取cookie的脚本注入攻击呢?
3个回答

13
但事实证明,来自bar.com网站的JavaScript只能访问由bar.com设置的cookie而不能访问其他cookie。这并不是真的。重要的是包含

这也是CDN的工作原理,就像加载在此网站上的jQuery脚本 http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js 不存储在 stackoverflow.com 域上。 - Marcel Korpel
@David,cookie的问题是在输入问题时拼写错误。我刚刚尝试了alert(document.cookie),尽管已经设置了cookie,但我只得到了一个空字符串。我感到非常困惑。 - roger
我进行了一项测试。域名没有任何区别。也许您正在尝试获取的 cookie 存储在不同的路径上,或者设置为仅限 HTTP。 - Quentin
Cooke 不是仅限于 http。网站 foo.com 包含来自网站 moo.bar.com 的脚本,并且 cookie 是使用域 bar.com(而不是 moo.bar.com)设置的,路径为 /。这是我正在测试的场景,但我无法读取 cookie。 - roger
3
哎呀,我明白了。在窃取Cookie时情况是相反的。来自bar.com的脚本驻留在foo.com中,试图读取来自foo.com而不是bar.com的cookie。谢谢。我理解上的漏洞已经被弥补了。 - roger
显示剩余2条评论

5
他们在攻击页面内部加载脚本。
例如,当博客系统中的评论被攻击时,它们包含一个 script 元素,在渲染页面时会被执行。这个脚本可以获取 cookies 并将其发送到攻击者的服务器。
这就是为什么你绝不能信任用户输入,并且至少应该禁止在评论中使用某些标签(或将每个 < 转换为 &lt;)。但不要在客户端上做这个预防技术,因为这种预防技术很容易被绕过;要在服务器端测试(并更改)恶意输入。

3

您只能访问为给定域名设置的cookie。来自维基百科关于cookie的文章

除了名称/值对之外,cookie还可以包含过期日期、路径、域名以及cookie是否仅用于加密连接。RFC 2965规定cookie必须具有版本号,但这通常被省略。这些数据片段跟随名称=新值对,并由分号分隔。例如,服务器可以通过发送Set-Cookie行来创建Cookie:name=newvalue; expires=date; path=/; domain=.example.org。域和路径告诉浏览器,在请求给定域和路径的URL时,必须将cookie发送回服务器。如果未指定,则默认为请求的对象的域和路径。因此,域和路径字符串可能会告诉浏览器在通常不会发送cookie时发送cookie。出于安全原因,只有服务器是域字符串指定的域的成员时才接受cookie。
如果foo.com发送了一个域名为bar.com甚至.com的cookie,那么在bar.com上的JavaScript代码可以读取该cookie。但是大多数浏览器都配置为仅接受与域名匹配的cookie,并且会拒绝此类cookie。

我验证了cookie存在,但JavaScript无法读取它。 - roger

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