HTTP 访问控制 (CORS) 可以阻止其他域 运行 我的脚本吗?

Can HTTP Access Control (CORS) prevent other domains from running my scripts?

我知道默认情况下其他域的 HTML 页面无法访问我的图片、视频。他们只能展示给他们看。但遗憾的是,他们仍然可以 运行 我的脚本。如果我的脚本将一些变量暴露在全局范围内,那么内部逻辑可能会被其他人知道。

我有一个别人不能访问的私人网站。只有我可以通过向服务器发送 Cookie 中的令牌来访问它。如果令牌不包含在 Cookie 中,则每个请求都会导致 500 服务器错误响应。这是安全的,因为一切都在 HTTPS 上。

但不幸的是,我发现这在我自己的机器上不是很安全,因为在我访问我的站点然后访问恶意站点之后,这个恶意站点可以使用以下方法来 运行 我的脚本:

<script src="https://my-website.com/main.js"></script>

那是因为我机器上的网站 Cookie 将作为第 3 方 Cookie 发送到我的服务器。

如何预防? access-control-allow-origin可以吗?

P.S。我不想在浏览器设置中禁用所有第 3 方 cookie。 Cookie 的 SameSite 也没有意义,因为现在只有 Chrome 支持它。

有许多可以想象的方法可以防止其他网站使用 script 元素来 运行 从您的网站复制脚本,但 CORS 不是其中之一。

浏览器是执行 same-origin 政策 (SOP) 的地方,浏览器是阻止 JavaScript 运行 网络应用程序无法使用来自 cross-origin 请求。

但是当 Web 应用程序使用 script 元素嵌入一些 JavaScript 时,浏览器不会使用 SOP/CORS。具体来说,浏览器不会检查脚本是否从其他站点提供 Access-Control-Allow-Origin header,这是整个 CORS 协议的基础。

所以 CORS 绝对不是你似乎想要解决的问题的解决方案。

But unfortunately, I find this isn't very safe on my own machine, because after I visit my site and then visit a malicious site, this malicious site can use the following method to run my script:

<script src="https://my-website.com/main.js"></script>

但是,如果该站点以这种方式将您的脚本嵌入到他们的脚本中,那么它 运行 属于 他们 的来源,而不是您的。它 运行 作为一个 受信任的 脚本存在,具有与他们自己编写的任何脚本相同的权限。

在这种情况下,另一个站点会面临安全风险 — 因为您可以随时更改 https://my-website.com/main.js 脚本以在其站点上执行任何您想做的事情。

也就是说,通过以这种方式嵌入您的脚本,其他站点为您的脚本提供程序化 fully-trusted 访问权限,以便在其整个源头上做任何它想做的事情——给您一个 XSS 机会。