首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Web 嵌入 | Electron 安全

,渲染进程访问 iframe 内变量的方式如下 iframe 页面设置变量 window.flag = "strings for iframe" 渲染进程可以使用 iframe 的 name 属性或者序号来获取...访问渲染进程就更简单了 渲染进程设置变量 window.abc = "abc" iframe 内通过以下代码获取到变量 window.parent.abc 这里需要注意一点,大多数渲染进程的窗口是通过加载本地文件创建的...的上下文 在开启上下文隔离的情况下,object 可以获取到渲染页面的上下文,但是无法获取 Preload 的上下文 显式地关闭上下文隔离,再次测试 object 成功获取到渲染页面以及 Preload...应用效果 在一个独立的 frame 和进程里显示外部 web 内容 所以其实可以把它视为一个和主窗口一样的窗口进程看待 使用 webview 标签将'guest'内容 (例如网页) 嵌入到您的 Electron...Electron 30.0 中添加,用来废弃并替换 BrowserView,它们是主进程模块,也就是说比 webview 更高级一层,不是渲染进程的一部分,而是由主进程直接进行管理 WebContentsView

99210

contextIsolation | Electron 安全

恰如其名,渲染器负责渲染网页内容。所以实际上,运行于渲染器进程中的代码是须遵照网页标准的 (至少就目前使用的 Chromium 而言是如此) 。...为了在渲染器中直接包含 NPM 模块,您必须使用与在 web 开发时相同的打包工具 (例如 webpack 或 parcel) Preload 脚本 预加载(preload)脚本包含了那些执行于渲染器进程中...为 true 时,下级均无法获取上级的变量/常量的值,隔离有效啊 方案 2 当 contextIsolation 设置为 false 时 渲染进程可以获取 Perload 变量的结果 iframe +...并不行,应该是因为修改脚本内容是在渲染进程中完成的,所以在执行的时候也会来渲染进程里来找上下文,结果一看,你这 window全局作用域里没有require 或者 process 等,如果将修改原型链的操作放在...自定义的变量/常量 或方法对象等可以在渲染进程中通过 window.xxx 进行使用以及更改 关闭 contextIsolation 后,JavaScript内置对象也在 Preload 和渲染进程之间共享

52210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    nodeIntegration | Electron安全

    官方的解释是: 是否启用Node integration 官方在安全建议中是这样描述的 加载远程内容时,不论使用的是哪一种渲染器(BrowserWindow,BrowserView 或者 webview...),最重要的就是绝对不要启用 Node.js 集成。...这个描述似乎在说,开启了 nodeIntegration 之后,渲染进程就可以获取到 NodeJS 的能力,这样渲染进程可以直接使用系统相关的方法,进而达到命令执行的效果 官方眼中的渲染器到底具体是什么呢...带着这种疑问,我们开始今天的文章 这篇文章在文末也提供了 PDF 版本 0x02 搭建测试程序 我们根据官方重大更改中提到的两个节点 Electron 5.0 和 Electron 20.0 将整个时间线分成四段...: true mixed sandbox: true sandbox: false 在 5.0 的发布说明中写明了,mixed sandbox 默认启用,但是 mixed sandbox 并不等同于 sandbox

    1K10

    Electron 9.0.0发布!带来三项重大改进,不再支持Electron 6

    #22336 这是一项持续性工作,针对未来的一个需求,即渲染器进程中加载的原生 Node 模块应为 N-API 或 Context Aware 之一。...在 Electron 9.0 中,旧的序列化算法已被移除,现在,发送这一类不可序列化的对象将出现“object could not be cloned(无法克隆的对象)”错误。...#22128 添加了 session.removeWordFromSpellCheckerDictionary API,以删除字典中的自定义单词。...将 contextIsolation 的默认值从 false 更改为 true(从 Electron 10 开始) 如果没有 contextIsolation,在渲染器进程中运行的任何代码都可以很容易地进入...关于 contextIsolation 的介绍、启用方法以及安全性细节,请参阅我们专门编写的 Context Isolation 文档: https://github.com/electron/electron

    1.9K10

    将浏览器嵌入 .NET 应用程序中:DotNetBrowser 还是 CefSharp?

    初始化和关闭都必须在主应用程序线程(通常是 UI 线程)中执行。在不同的线程中调用它们通常会导致冻结。 此外,每个进程可以执行一次初始化和关闭。这个限制来自 CEF 本身。...在执行关闭后尝试重新初始化 CefSharp 将导致错误。 CefSharp architecture 在 DotNetBrowser 中,Chromium 引擎在单独的本机进程中进行初始化。...DotNetBrowser architecture 稳定性和内存使用 在单独的进程中运行 Chromium 有更多优点: 在这种情况下,内存消耗要低得多,这对于 32 位应用程序来说似乎很关键。...此媒体无法在 CefSharp 中播放。 要在 CefSharp 中启用这些编解码器,您需要在启用专有编解码器的情况下自行重建 CEF。这是一项相当复杂的任务,可能需要长达一个月的时间[8]。...DotNetBrowser 支持沙箱并默认启用。如有必要,可以在初始化期间将其禁用[11]。 CefSharp 在 .NET 进程中启动 Chromium。

    57320

    Electron入门教程2 ——进程模型

    对于所有的意图和目的,在渲染进程中运行的代码应该按照web标准运行(至少在Chromium中是这样的)。...为了在渲染器中直接包含NPM模块,你必须使用你在web上使用的相同的捆绑工具链(例如,webpack或parcel等)。 ✧ 预加载脚本 预加载脚本包含在web内容开始加载之前在渲染进程中执行的代码。...但这里要注意,尽管预加载脚本与它们所连接的渲染器共享一个全局窗口,但由于contextIsolation默认值使上下文隔离的缘故,你不能直接将任何变量从预加载脚本连接到窗口。...在默认情况下,自Electron 12以来已经启用了上下文隔离,建议所有应用程序都采用此安全设置。...上下文隔离意味着预加载脚本与渲染器的主世界隔离,以避免泄露任何特权api到你的web内容的代码中。

    98150

    sandbox | Electron 安全

    0x01 简介 大家好,今天跟大家讨论的内容是 sandbox, sandbox 是一项 Chromium 的功能,它使用操作系统来显著地限制渲染器进程可以访问的内容,在 Electron 中,限制的方面还要包括...,它可以给任意 C/C++ 应用程序使用,它作为一个 C++ 库,可以在调用后开始保护应用程序,可以创建沙盒进程,这是一种在非常限制的环境中执行的进程。...沙盒进程可以自由使用的唯一资源是 CPU 周期和内存。例如,沙盒进程无法写入磁盘或显示自己的窗口。他们究竟能做什么是由一个明确的策略控制的。 Chromium 渲染器是沙盒进程。...0x04 sandbox 历史 Electron 3.0 允许在沙盒化的渲染进程中使用 webview Electron 6.0 混合沙盒默认启用 此时开始,sandbox 显式地设置为 true...后,Preload 不可以执行危险的 Node.js API Electron 20.0 默认情况下会对渲染器进行沙盒化 此时开始,默认情况下 Preload 不可以执行危险的 Node.js API

    25110

    Electron 安全与你我息息相关

    预加载脚本 主进程可以与操作系统交互,渲染进程只能渲染网页,那么当功能需要操作系统支持的时候,渲染进程如何将需求传递给主进程,主进程如何将结果传递给渲染进程就是个问题,Electron 设计了一系列的...这些脚本虽运行于渲染器的环境中,却因能访问 Node.js API 而拥有了更多的权限,当然,为了安全考虑,它的 API 是受限的,主要就是发起 IPC 请求或监听,将自定义的API和变量等传递给渲染进程使用...请注意,如果禁用此fuse,则主进程中的process.fork将无法按预期运行,因为它依赖于此环境变量来运行 Enabled cookieEncryption cookieEncryption 磁盘上的...此环境变量可用于将各种自定义选项传递到Node.js运行时,并且通常不被生产中的应用程序使用。...默认情况下,Electron的进程都将使用相同的V8快照文件。启用此fuse后,浏览器进程将使用名为browser_v8_context_snapshot.bin 的文件作为其V8快照。

    1.8K10

    Electron 快速入门,顺便聊聊 IPC 通信

    因为窗口无法在 ready 事件前创建,你应当在你的应用初始化后仅监听 activate 事件。通过在您现有的 whenReady() 回调中附上您的事件监听器来完成这个操作。...然而,在 index.js 主进程中,是不能编辑 DOM 的,因为它无法访问到渲染进程 document 上下文,它们存在于完全不同的进程中。 这时候,预加载脚本就可以派上用场了。...由于预加载脚本与渲染器共享同一个全局 Window 接口,因此它通过在 window 全局中暴露任意您的网络内容可以随后使用的 API 来增强渲染器。...不过我们不能在预加载脚本中直接给 window 挂载变量,因为 contextIsolation 是默认的。...当在主进程中使用时,它处理从渲染器进程(网页)发送出来的异步和同步信息。从渲染器进程发送的消息将被发送到该模块。

    1.7K11

    一文搞懂Electron的四种视图容器和它们之间的IPC通信机制

    它会在渲染器加载页面之前运行, 可以同时访问 DOM 接口和 Node.js 环境,并且可以通过 contextBridge 接口将特权接口暴露给渲染器。...,但如果实际业务中确实有需求,也可以在send的时候带上唯一标识ID,由渲染进程处理完毕后,携带id发起send,通过两次通信模拟出同样的效果。...,游离在宿主页面的dom树之外,意味着一旦创建,宿主页面的其它元素都无法通过设置z-index的方式透显在它上面。...不同的BrowserView之间也可以通过sendTo来互相通信。2. BrowserView和宿主页面通信正因为BrowserView的上下文是完全独立的,所以无法直接和宿主页面互通。...,那么在极端情况下,如果业务代码刚启动就调用了api,有可能主进程还没有完成注册,此时可能会调用失败。

    11K76

    将浏览器嵌入 .NET 应用程序中:DotNetBrowser 还是 CefSharp?

    初始化和关闭都必须在主应用程序线程(通常是 UI 线程)中执行。在不同的线程中调用它们通常会导致冻结。 此外,每个进程可以执行一次初始化和关闭。...此媒体无法在 CefSharp 中播放。 要在 CefSharp 中启用这些编解码器,您需要在启用专有编解码器的情况下自行重建 CEF。这是一项相当复杂的任务,可能需要长达一个月的时间[8]。...在 DotNetBrowser 中默认禁用专有编解码器。可以通过编程方式启用它们,而无需重建库。 安全 Chromium 通过利用操作系统为它们提供的安全性来限制其渲染器和实用程序进程。...这个限制来自 CEF 本身,DotNetBrowser 支持沙箱并默认启用。如有必要,可以在初始化期间将其禁用[11]。 CefSharp 在 .NET 进程中启动 Chromium。...以下是将 CefSharp 嵌入 WPF 窗口的方法: 就是这样,在最简单的情况下,不再需要编写代码。

    66040

    nodeIntegrationInSubFrames | Electron 安全

    ,在虚拟机里又装了虚拟机一个道理,而最终的物理机被称为顶级浏览上下文 在 Electron 之前的测试中,我们只用到了一个窗口,我们一直称之为主窗口,但从逻辑角度来说,没有子窗口的存在,也就没有什么主窗口之说...,官网原话是 从 Electron 20 开始,渲染进程默认启用了沙盒,无需进一步配置。...测试预加载脚本 官网还提到一个功能,就是 Preload 会被注入到每一个 iframe 我们在 Preload 中创建一个 变量/常量,让 iframe 中的脚本 alert 弹窗显示出来 preload.js...这听起来就很奇怪,我们测试一下就知道了 我们尝试创建子窗口,在主窗口中设置 nodeIntegrationInSubFrames: false ,并在子窗口设置渲染进程可以执行 Node.js ,咱们看看到底能不能执行...、object、embed内暴露,也就是说iframe、object、embed 内部的内容中的 JavaScript 可以直接使用 Preload 脚本中定义好的功能和值 如果嵌入 iframe、object

    32510

    新窗口创建问题 | Electron 安全

    在之前的章节中,我们尝试过使用 BrowserWindow、BaseWindow 在主进程中创建窗口,同时我们尝试过在渲染进程中通过 window.open 创建新的窗口 除此之外还有两个特例,就是...,因为它是在主进程中调用的。...同时将 WebPreferences 中的一部分拿出来,也作为快捷的配置,例如 zoomFactor nodeIntegration preload javascript contextIsolation...(以像素为单位) 6) noopener 如果设置了此特性,新窗口将无法通过 Window.opener 访问原窗口,并返回 null。...,测试主要是用的最新版本 Electron ,我们将创建新窗口分为两类 主进程创建新窗口 渲染进程创建新窗口 其中主进程创建新窗口可讨论的内容较少,除非攻击者可以控制构造过程中的参数,不然很难发起攻击,

    64810

    基于electron快速将任意网站打包成跨平台的桌面端软件

    我们可以控制两种类型的进程:主进程和渲染器。 每个 Electron 应用都有一个单一的主进程,作为应用程序入口。主进程在 Node 环境中运行,我们可以使用所有 Node 的能力。...那么主进程中我们可以做些什么呢? 主进程的主要目的是使用 BrowserWindow 模块创建和管理应用程序窗口。...BrowserWindow 类的每个实例创建一个应用程序窗口,且在单独的渲染器进程中加载一个网页。我们可从主进程用 window 的 webContent 对象与网页内容进行交互。...Webdesk 功能及特点: 快速转换:WebDesk可以在几分钟内将网页转换为桌面应用,无需编码或复杂的设置 多平台支持:可以将网页转化成 Window 桌面应用、macOs桌面应用。...体积过大:安装包体积约为 80MB,相对较大 内存占用高:运行时内存占用较高 无法离线使用:需要网络连接才能使用,不支持离线模式 Webdesk 未来规划: 代码签名:增加自动或自定义代码签名功能,提高安装安全性

    74710

    第四章-使用本机文件对话框和帮助进程间沟通 | Electron实战

    dialog.showOpenDialog()返回所选文件的名称,用户选择的路径数组存储在名为files的变量中。...如果用户按下取消,如果我们试图在未定义的情况下调用文件的任何方法,dialog.showOpenDialog()将返回未定义的并中断。...remote模块允许我们在主进程中定义功能,并且很容易使其对渲染器进程可用。...渲染器进程中的事件监听器在同一通道上监听。当我们看到它的行动时,这种流动将变得更加清晰。第一个参数之后的所有后续参数都传递给渲染器进程。...下一章将介绍打开文件的其他方法,这些方法不需要一个对话框来提示用户选择特定的文件,因为我们确实会遇到一些情况,在不触发对话框的情况下打开文件。 列表4.13 从主进程发送内容到渲染器进程: .

    1.9K20

    第三章 构建Markdown应用程序 | Electron in Action(中译)

    本章主要内容: 介绍我们将在接下来的几章中构建的应用程序 配置我们的CSS样式表,使其看起来更像一个本机应用程序 回顾在Electron中主进程和渲染器进程之间的关系 为我们的主进程和渲染器进程实现基本功能...也就是说,由于我们的主进程目前在渲染器进程中加载了一个空文件,所以没有发生太多事情。 实现用户界面 在Electron中要获得图3.1中效果图的可行版本,实现必要的HTML和CSS是相当容易的。...我们将font属性设置为menu,它依赖于操作系统来使用它的默认字体——即使我们无法访问它。 浏览器在当前活动的UI元素周围设置一个边框。在macOS中,这个边框是蓝色的辉光。...mainWindow = null; }); }); 我们将一个对象传递给BrowserWindow构造函数,默认情况下将其设置为hidden。...Electron的默认应用程序菜单提供了一个命令来打开应用程序中的Chrome开发工具。在第6章中,我们将学习如何创建我们自己的自定义菜单,并在您不希望将其公开给用户的情况下消除此功能。

    2.1K30
    领券