CDN 或外部 JavaScript 文件如何在网站中工作?

Posted

技术标签:

【中文标题】CDN 或外部 JavaScript 文件如何在网站中工作?【英文标题】:How Come a CDN or External JavaScript File works in a Web Site? 【发布时间】:2011-12-16 15:03:19 【问题描述】:

首先,我很尴尬,我不知道这一点。我知道这些东西有效,但不知道为什么。关于 CDN 和 Google Analytics(分析)或 Adsense 之类的东西,我仍然不了解一些东西。

如果这些脚本来自您网站域以外的域,这一切与same origin policy (SOP) 和cross-site scripting (XSS) 有什么关系?根据我对 XSS 和 SOP 的了解,这些脚本不应该能够在您的站点中运行或与 DOM 交互。他们怎么会有特权?以及这些特殊权限与其他因 XSS 和 SOP 导致浏览器出错的外部脚本有何区别?

简而言之,我想知道为什么允许来自其他域的脚本运行、与我的网站交互和操作?

【问题讨论】:

相关:***.com/questions/12543978/… 也相关:***.com/questions/11991915/… 【参考方案1】:

您误解了这些政策。

SOP 防止页面(例如在框架中)与来自不同域的页面交互,或读取不同域中的资源(AJAX 请求)。

在您的页面中执行来自不同域的脚本没有任何问题,只要您明确加载它。 (这就是 JSONP 的工作原理)但是,您无法读取脚本的源代码,因为这是来自不同域的资源。

浏览器安全限制基于执行代码的页面来源,而不是特定 <script> 来自的站点。


请注意,包含来自不同域的 javascript 会授予该脚本对您页面的完全访问权限;它可以发送 AJAX 请求(到您的域)并通过向其他域发送非 AJAX 请求来窃取信息。

如果您信任该域,则仅包含来自不同域的脚本。

【讨论】:

感谢您澄清 SOP,但我仍然没有得到 CDN 和 Google Analytics 之类的非 XSS 问题。 XSS 是一种注入攻击。什么意思? @nickyt 因为您域中的 页面 明确要求浏览器加载并执行脚本。 脚本代码可以完全访问您的 DOM,因此它可以通过添加 <script> 元素等方式对其进行处理。同样,浏览器基本上假定您知道自己在做什么。浏览器将阻止访问您从其他域加载的那些脚本的源代码。脚本代码本身的出处永远不会影响它可以做什么,只会影响其他脚本是否可以访问源代码。 (需要注意的是,有些人认为这是一个安全问题,但它会破坏网络以禁止它。) @nickyt:可以随时添加<script>标签;不管它是原始来源的一部分还是动态添加的。

以上是关于CDN 或外部 JavaScript 文件如何在网站中工作?的主要内容,如果未能解决你的问题,请参考以下文章

HTTPS 和外部 (CDN) 托管文件?

如何使用 webpack 从外部文件加载 AMD 模块

如何通过 cdn 脚本注册 service worker。如何使用外部 url 注册 service worker

在 ionic 2 中使用或导入外部 javascript 文件

帝国cms提高网站网页打开速度的手段

将javascript添加到页面或外部javascript文件[重复]