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 文件如何在网站中工作?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 cdn 脚本注册 service worker。如何使用外部 url 注册 service worker