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

时间:2017-02-15 20:29:41

标签: http cookies cors xss same-origin-policy

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

浏览器是强制执行CORS协议的地方,浏览器是阻止在Web应用程序中运行的JavaScript能够使用来自跨源请求的响应的工具。

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

因此,CORS绝对不是您似乎想要解决的问题的解决方案。

  

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

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

但是如果那个网站以这种方式嵌入你的脚本,它会在他们的来源中运行,而不是你的,对吧?它作为受信任的脚本在那里运行,具有他们自己编写的任何脚本的所有相同权限。

因此,在这种情况下,另一个网站是承担巨大安全风险的网站 - 因为您可以随时更改您的https://my-website.com/main.js脚本,以便在其网站上执行任何操作。

换句话说,通过以这种方式嵌入您的脚本,另一个站点为您的脚本提供完全受信任的完全编程访问权限,以便在整个原点上执行任何操作 - 为您提供XSS机会。