是否可以阻止远程脚本在 iframe 中加载
Is it possible to block remote scripts from loading inside iframe?
我正在动态创建 iframe,我想防止不是源自 iframe 源的脚本。这甚至可能吗(通过JavaScript/jQuery)?例如,如果我的页面从example.com
加载包含以下内容的 iframe:
<script src="http://example.com/foo.js"></script>
<script src="http://something-else.com/bar.js"></script>
我希望运行example.com
脚本,但我希望阻止something-else.com
脚本而不运行。
我使用的是NW.js(以前称为Node-Webkit),因此我对iframe的内容具有完全读写访问权限,就好像它们是同源的一样。
我尝试过使用插件(例如那些将 CORS 带入图片的插件,带有白名单),但我尝试过的一切都不起作用。
一个理想的解决方案还允许我将除 iframe 的起源之外的特定其他来源列入白名单。
编辑:
这是我的浏览器项目,我正在尝试实现它:https://github.com/IdeasNeverCease/Aries
以下是完成 iframe 加载的代码部分:https://github.com/IdeasNeverCease/Aries/blob/master/app.nw/resources/scripts/aries.js#L376-L687
我想阻止不是来自 iframe 源的脚本
这正是内容安全策略 (CSP) 的用途。CSP 可以指定脚本、插件、样式、媒体等允许哪些源。您需要使每个 iframe 都有一个 CSP,以防止脚本加载到当前源之外;这可以通过简单的策略script-src 'self' 'unsafe-inline';
来完成(unsafe-inline
允许 iframe 具有内联脚本,self
将负载限制为仅对同源资源)
传统上,您需要服务器在提供页面时发送Content-Security-Policy
响应标头。但是,如果您无法控制服务器发送的响应标头(但可以控制页面内容),则可以使用<meta>
标记来模拟HTTP响应标头,如下所示:
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';">
您可以通过编程方式注入此内容(但请继续阅读以了解问题):
var m = document.createElement("meta");
m.httpEquiv = "content-security-policy";
m.content = "script-src 'self' 'unsafe-inline';";
iframeElem.contentDocument.documentElement.appendChild(m);
但是,这种基于脚本的注入可能不适合您,因为只有在从 HTML 源解析 DOM 后,您才可以使用 DOM。此时,来自任何(非async
)<script>
元素的脚本已经被获取并运行。您可能需要直接操作 HTML,但我对 NW 的了解还不够.js无法告诉您执行此操作的最佳方法。
如果要禁止所有外部脚本资源(即使是来自同一源的资源),可以使用 script-src 'none' 'unsafe-inline';
。要禁止所有脚本(包括加载的脚本和内联脚本),请使用script-src 'none';
要将特定来源列入白名单,只需将它们添加为 CSP 中的未引用项目:
Content-Security-Policy: script-src 'self' *.twitter.com https://api.facebook.com
前导*.
允许所有子域,前导https://
将该域的白名单限制为仅保护https://
地址。
- 使用php脚本验证访问者的年龄,并在不刷新的情况下根据结果加载iframe
- 动态创建的iframe中的window.onerror在lne 0处给出脚本错误
- 是否可以添加<脚本>添加'_someTag'到iFrame中的URL
- 在Perl CGI脚本中捕获iframe返回值
- 如何检测何时执行 iframe 脚本
- 如何以编程方式将内容脚本添加到 iframe 文档
- 没有在带有IE-FF的IFrame中运行的脚本是可以的
- 如何使用java脚本将iframe的src设置为当前访问的站点
- 如何将数据从注入的内容脚本传递到iframe
- 插入<脚本>使用jQuery将其转换为iframe
- 如何使用jquery或vanillajavascript从iframe中获取两个脚本src
- 我想在Iframe Javascript PHP的帮助下,将单个ajax上传器脚本转换为多个上传器
- 当尝试登录instagram时,带有Selenium的Phantomjs不处理iframe Java脚本
- 如何访问iframe's来自用户脚本的javascript
- IFRAME和谷歌应用程序脚本中的NATIVE模式
- 实时在更改时重新加载iframe脚本
- IFRAME沙盒中的Google OAuth2和应用程序脚本
- 是否可以阻止远程脚本在 iframe 中加载
- 跨站点脚本Iframe权限被拒绝的问题
- “Internet Explorer浏览器已修改此页面,以帮助防止跨站点脚本”;iframe