是否可以阻止远程脚本在 iframe 内加载?

2024-02-23

我正在动态创建 iframe,并且我想阻止不是源自 iframe 来源的脚本。这可能吗(通过 JavaScript/jQuery)?例如,如果我的页面加载 iframeexample.com内容:

<script src="http://example.com/foo.js"></script>
<script src="http://something-else.com/bar.js"></script>

我想要example.com要运行的脚本,但我想要something-else.com脚本被阻止并且不运行。

我在用NW.js https://github.com/nwjs/nw.js/tree/master(以前称为 Node-Webkit),因此我可以对 iframe 的内容进行完全读写访问,就好像它们是同源的一样。

我尝试过使用插件(比如那些在图片中引入 CORS 并带有白名单的插件),但我尝试过的都不起作用。

理想的解决方案还允许我将除 iframe 来源之外的特定其他来源列入白名单。

EDIT:

这是我的浏览器项目,我正在尝试在其中实现此功能:https://github.com/IdeasNeverCease/Aries https://github.com/IdeasNeverCease/Aries

这是 iframe 加载完成的代码部分:https://github.com/IdeasNeverCease/Aries/blob/master/app.nw/resources/scripts/aries.js#L376-L687 https://github.com/IdeasNeverCease/Aries/blob/master/app.nw/resources/scripts/aries.js#L376-L687


我想阻止不是源自 iframe 源的脚本

这正是内容安全政策 http://www.html5rocks.com/en/tutorials/security/content-security-policy/(CSP) 是为了。 CSP 可以指定允许脚本、插件、样式、媒体等使用哪些源。您需要使每个 iframe 都有一个 CSP,以防止脚本加载到当前源之外;这可以通过简单的策略来完成script-src 'self' 'unsafe-inline'; (the unsafe-inline允许 iframe 有内联脚本并且self仅限制加载同源资源)

传统上,您需要服务器发送Content-Security-Policy提供页面时的响应标头。但是,如果您无法控制服务器发送的响应标头(但do可以控制页面内容)您可以使用以下内容模仿 HTTP 响应标头<meta>像这样标记:

<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 的了解还不够,无法告诉您执行此操作的最佳方法。

如果你想禁止all外部脚本资源(甚至是来自同一来源的),您可以使用script-src 'none' 'unsafe-inline';。禁止all脚本,包括加载脚本和内联脚本,使用script-src 'none';

为了将特定来源列入白名单,只需将它们添加为 CSP 中未加引号的项目:

Content-Security-Policy: script-src 'self' *.twitter.com https://api.facebook.com

领先的*.允许所有子域和前导https://限制该域的白名单以确保安全https://仅地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以阻止远程脚本在 iframe 内加载? 的相关文章

  • 在鼠标光标位置添加 cytoscape 节点

    我想在画布上的单击事件上的鼠标箭头位置添加一个 cytoscape 节点 我怎样才能做到这一点 我的方法 效果不太好 我可以通过单击创建一个节点 但无法确保创建的节点的位置位于我单击的位置 使用这样的东西 cy click function
  • 启用/禁用由用户输入确定的复选框

    我有一个简单的表单 用户可以在其中输入他的联系号码 如果联系号码以 07 开头 则该复选框已启用 其他我需要禁用它的复选框 我已经编写了一些代码 但我面临的问题是 当用户键入 01 时 它会被禁用 但如果他们继续在 01 之后添加任何其他数
  • javascript jquery 使用脚本更改脚本的src

    我有一个 JavaScript 脚本 它有一个 src 元素 这个 src 是一个 url 我想使用 javascript 更改它 一次更改为其他内容 或者动态创建它 使用 javascript jquery 动态创建脚本元素的最佳方法是什
  • 如何动态突出显示网页上的字符串?

    我想创建带有 url 的页面 例如 http xyzcorp schedules 2015Aug24 Aug28 Jim Hawkins http xyzcorp schedules 2015Aug24 Aug28 Billy Bones
  • 确定元素是在页面折叠上方还是下方

    我有一些页面有多个输入框 用户可以在其中输入文本 在单击 下一步 按钮之前 需要填写其中一些内容 我弹出验证错误供用户查看 但是如果问题不在页面上 我希望页面滚动到它 而不是他们必须搜索丢失 错误的字段 我有一个滚动到位 但我无法确定要滚动
  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • 使用文件 API 将资源加载到 Three.js 中

    我想创建导入 3D 模型以在浏览器中查看的功能 方法是使用File API http www html5rocks com en tutorials file dndfiles Three js 加载器在我托管的文件上运行良好 我的理解是加
  • JavaScript 测验在提出所有问题之前结束

    我现在正在学习 JavaScript 并且正在创建一个测验 我的测验运行正常 控制台中没有任何错误 但它会跳过问题 有时会在回答所有问题之前结束测验 即使给出正确答案 也会减少时间 我不太确定为什么它会这样做 因为在我看来它的编码是正确的
  • 在管道中重用变量的功能方式

    在 javascript 和 typescript 中与 Ramda 一起使用函数式编程 我经常发现自己编写如下代码 const myFun c gt const myId c id const value pipe getAnotherO
  • 为什么将 x 和 y 设置为 0 时 svg 文本会消失?

    我刚刚开始阅读有关svg我提出了以下问题 我正在创建一个简单的svg with a text里面如下图所示 从我的阅读中我了解到x and y of the text标签声明文本在标签内的位置svg space 为什么当我同时设置x and
  • 如何检测元素内容何时发生变化

    我正在寻找一种方法来监视元素内动态填充 无页面重新加载 内容 以便我可以将类添加到另一个元素 到目前为止我有这个 HTML div class message container div class messages error span
  • 如何使用 vanilla JS 实现可维护的反应式 UI

    今天我遇到了一个问题 可以通过使用像 Vue 这样的反应式和状态管理框架来轻松解决 遗憾的是 无法使用它 以下 简化 情况 链接到代码笔 https codepen io theiaz pen BazErKV 我们有一个服务器渲染的页面 其
  • 计算文本选择的 xy 位置

    我正在尝试使用 DOM 元素创建自己的文本选择 是的 我的意思是当您在此元素中选择文本时 您会在文本后面看到蓝色背景 这个想法是停止默认行为 蓝色 并使用我自己的元素来完成工作 方法是找到选择的 xy 位置 然后放置绝对定位的元素 我希望能
  • 尝试在 React 应用程序中连接到 MySQL 数据库时,无法读取未定义的属性(读取“查询”)错误

    我正在尝试连接到 MySQL 数据库并在单击按钮后在 React 应用程序中运行查询 一些它如何给出错误 我当前的代码如下所示 import mysql from mysql function App async function sync
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • MongoDB中如何通过引用字段进行查询?

    我有两个 Mongo 模式 User id ObjectId name String country ObjectId Reference to schema Country Country id ObjectId name String
  • Node npm 包抛出使用严格:全局发布和安装后未找到命令

    我正在尝试发布 npm 包 当我全局安装该包并尝试运行 cli 命令时 我收到此错误 nvm versions node v0 12 2 bin myPack line 1 use strict command not found nvm
  • 如何使用 jQuery 或 JavaScript 聚焦 或 标签?

    for var i 0 i
  • 强制输入数字小数位

    我想强制
  • 从输入类型编号获取无效值

    我正在使用输入类型数字 当它无效时 我如何从中获取值 例如 使用类型编号并仅打印 e 这本身是无效的 我正在使用 React 但我认为这个问题非常普遍 onChange event console log event target valu

随机推荐

  • Safari 不会通过 HTTPS 播放 mp4

    我有一个文件sample html 其中仅包含以下代码
  • 在tinymce中禁用自动moxieplayer换行

    我构建了一个功能 可以上传 转换视频 然后将视频嵌入到tinymce 中 Tinymce 使用他们的 moxieplayer swf 不断用一些 html 封装我的视频嵌入 我想对这些视频使用自定义视频播放器 但当 tinymce 的行为如
  • 交错 NumPy 数组[重复]

    这个问题在这里已经有答案了 我正在尝试按如下方式交错数组 import numpy as np x np array 1 2 3 4 5 y np array 4 6 2 6 9 5 9 8 7 4 3 2 5 4 9 期望的结果 1 2
  • 设定差值的输出可以存储在第一个输入中吗?

    如果我有 2 个向量 或双端队列 我可以将它们的 set difference 存储在第一个向量中吗 又名来自 cpp wiki 参考的示例 std vector
  • 比较不匹配正则表达式的速度

    下面的 Python 代码非常慢 import re re match a c a 30 b 如果用更大的常数替换 30 情况会变得更糟 我怀疑由于连续的解析歧义 是罪魁祸首 但我在正则表达式解析和匹配方面不是很专家 这是Python正则表
  • 提取关键属性 mongocxx

    我试图通过 mongocxx 仅提取关键属性 但使用 find 和 find one 函数 我无法仅提取关键值 int main int char mongocxx instance inst mongocxx client conn mo
  • 为什么在 C 中使用 atoi() 会得到这个意想不到的结果?

    我不明白以下 C 代码的结果 main char s AAA advanceString s void advanceString p 3 int val atoi p printf The atoi val is d n val 这里的a
  • 使用 FileSystemWatcher 观察 log4net 日志文件

    我创建了简单的 WPF 控件来监视日志文件中的更改 我使用 FileSystemWatcher 来监视特定文件 我的配置 Directory System IO Path GetDirectoryName logFileFullPath F
  • Swift -Ounchecked 和断言

    Preface 在斯威夫特中 ENABLE NS ASSERTIONS被忽略 断言是打开还是关闭取决于SWIFT OPTIMIZATION LEVEL 浏览此处获取更多信息 http blog krzyzanowskim com 2015
  • 两个多边形的最近点

    我有两个多边形 我想获得最小距离 并测量该距离之间的点 当然 这样的点很可能位于两个节点之间的边缘 这是一个例子 我正在寻找一种算法 可以给我绿色距离和两个点 如果多边形不相交 您可以这样做 如果有多边形 A 和多边形 B 则 A i 和
  • 在 wget 或curl 查询中使用通配符

    从目录下载时是否可以在 wget 查询中使用通配符 基本上 我有一个网站 www download example com dir version package rpm 然而 版本目录一直在变化 有时包含多个RPM包 是否有一个 wget
  • 如何在有可用空间(如密度扫描仪)的 pdf 上插入图像或图章

    我有一个 pdf 文件 我在其中的所有页面上添加了图章 但是 问题是 图章被添加到每个页面的左上角 如果页面的该部分有文本 则标记会出现在文本上 我的问题是 有什么方法可以阅读每一页 如果该部分没有文本 请添加图章 否则搜索最近的可用可用空
  • onCreateOptionsMenu(Menu 菜单) 和 onPrepareOptionsMenu(Menu 菜单) 有什么区别?

    解释一下之间的区别onCreateOptionsMenu Menu menu and onPrepareOptionsMenu Menu menu onCreateOptionsMenu 被调用一次 onPrepareOptionsMenu
  • 如何在同一个组件中初始化和使用上下文?

    我有一个名为 SortContext 的上下文 我想做的是初始化这个上下文 创建它的提供者 然后在同一个组件中使用该上下文 这可能吗 例如 export default function MyComponent children const
  • 连接两个 numpy 矩阵

    如果你有两个 numpy 矩阵 如何将它们连接在一起 它们应该水平连接 以便 0 1 0 1 1 0 1 0 4 1 4 1 0 1 0 1 例如 对于这些矩阵 gt gt type X gt gt type Y gt gt X shape
  • Swift 可以将类/结构数据转换为字典吗?

    例如 class Test var name String var age Int var height Double func convertToDict gt String AnyObject let test Test test na
  • React 使表格可点击并编辑详细信息

    如何使表格行可单击以编辑和更新详细信息 我正在从 pouchdb 检索这些详细信息 我将部分代码粘贴到下面以供您评估 this state docs this db this props db componentDidMount this
  • 计算图像中圆心的坐标

    假设我有这张图像 我想得到 X Y 中每个圆的中心 MatLab 有没有算法可以做到这一点 只需拨打一次电话即可实现区域属性 http www mathworks nl help images ref regionprops html im
  • Django:检查模板中ManyToMany字段的值

    我的 Django 应用程序中有以下模型 class Group models model name models CharField max length 30 users Models ManyToManyField User 在我的模
  • 是否可以阻止远程脚本在 iframe 内加载?

    我正在动态创建 iframe 并且我想阻止不是源自 iframe 来源的脚本 这可能吗 通过 JavaScript jQuery 例如 如果我的页面加载 iframeexample com内容 我想要example com要运行的脚本 但我