繁体   English   中英

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 将作为 3rd-party Cookie 发送到我的服务器。

如何防止? access-control-allow-origin可以这样做吗?

PS 我不想在浏览器设置中禁用所有 3rd-party cookie。 Cookie 的SameSite也没有意义,因为现在只有 Chrome 支持它。

有许多可以想象的方法来阻止其他站点使用script元素在他们的站点中运行来自您站点的脚本副本,但 CORS 不是其中之一。

浏览器是执行同源策略 (SOP) 的地方,浏览器是阻止 Web 应用程序中运行的 JavaScript 使用来自跨源请求的响应的地方。

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

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

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

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

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

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

也就是说,通过以这种方式嵌入您的脚本,另一个站点为您的脚本提供了完全可信的编程访问权限,可以在其整个源头执行任何它想做的事情——给您一个 XSS 机会。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM