electron 中 contextBridge 作用

1. 安全地实现渲染进程和主进程之间的通信

在 Electron 应用中,主进程和渲染进程是相互隔离的,这是为了安全和稳定性考虑。

然而,在很多情况下,渲染进程需要访问主进程中的某些功能,例如系统级别的操作或者一些应用级别的全局资源。

contextBridge 模块的主要作用就是在这两个隔离的进程之间建立一个安全的、受限制的通信桥梁。

它允许主进程有选择性地将一些安全的 API 或者数据暴露给渲染进程,同时防止渲染进程直接访问主进程中可能存在安全风险的部分。

2. 防止安全漏洞

避免直接暴露主进程模块给渲染进程

如果没有 contextBridge,简单地将主进程模块(如`electron`模块)直接暴露给渲染进程,会带来严重的安全风险。

例如:渲染进程可能会意外地或者被恶意地利用来执行一些危险的操作,像访问本地文件系统、控制窗口的无限制行为等。

contextBridge 通过限制和代理的方式,只允许特定的、经过验证的通信,从而降低这种安全风险。

3. 具体使用方法和示例

3.1 在主进程中定义暴露给渲染进程的 API

首先,在主进程(通常是`main.js`)中,使用 contextBridge 来定义可以安全地暴露给渲染进程的函数或者数据。

const { app, BrowserWindow, contextBridge } = require("electron");let win;function createWindow() {win = new BrowserWindow({width: 800,height: 600,webPreferences: {nodeIntegration: false,contextIsolation: true,preload: path.join(__dirname, "preload.js"),},});win.loadFile("index.html");}app.on("ready", createWindow);// 在主进程中定义一个安全的API,例如获取应用版本号contextBridge.exposeInMainContext("versions", {appVersion: app.getVersion(),});

在预加载脚本(preload.js)中进行配置(如果需要),预加载脚本在渲染进程加载网页之前运行,它可以进一步配置和管理 contextBridge 暴露的内容。

const { contextBridge } = require("electron");// 可以在这里对暴露的API进行进一步处理,如验证、转换等contextBridge.exposeInMainContext("moreData", {// 假设这里添加一些其他的数据或者函数});

在渲染进程中使用暴露的 API,在渲染进程(例如`index.html`对应的 JavaScript 文件)中,就可以使用主进程暴露过来的 API。

window.versions.appVersion;

这里通过`window.versions`访问到主进程暴露的应用版本号信息。渲染进程只能访问主进程通过 contextBridge 暴露的特定内容,无法访问主进程中的其他未暴露部分,从而保证了安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/59786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件分享丨火绒应用商店

【资源分享】 资源名:火绒应用商店 官方网址:点击跳转 火绒应用商店是由火绒安全推出的一款独立软件。它提供了海量的应用程序,涵盖办公、社交、游戏、视频、工具等多种领域和类别,方便用户轻松找到所需的应用并进行一键下载安装…

Spring Cloud Alibaba Spring Cloud Spring Boot JDK 版本依赖关系

Spring Cloud Alibaba & Spring Cloud & Spring Boot & JDK 版本依赖关系 Spring Cloud Alibaba & Spring Cloud & Spring Boot Spring Cloud & Spring Boot Spring Boot & JDK JDK 8的新项目推荐版本 Spring Cloud Alibaba 2021.0.5.0* &…

S32G-VNP-RDB2开发环境搭建

下载官方镜像 刷机 cat /proc/partition or df -lh //查看sdcard卡再/dev目录挂在点 export DEVSD/dev/sdb sudo dd iffsl-image-auto-s32g274ardb2.sdcard of${DEVSD} bs1M && sync以上将SD-card插入就可以将开发板启动,串口接UART1,进入Lin…

信息化运维方案,实施方案,开发方案,信息中心安全运维资料(软件资料word)

1 编制目的 2 系统运行维护 2.1 系统运维内容 2.2 日常运行维护方案 2.2.1 日常巡检 2.2.2 状态监控 2.2.3 系统优化 2.2.4 软件系统问题处理及升级 2.2.5 系统数据库管理维护 2.2.6 灾难恢复 2.3 应急运行维护方案 2.3.1 启动应急流程 2.3.2 成立应急小组 2.3.3 应急处理过程 …

MFC 重写了listControl类(类名为A),并把双击事件的处理函数定义在A中,主窗口如何接收表格是否被双击

刚接触MFC遇到的问题,我在主对话框的.cpp里添加了表格的双击处理事件,但是没用,试了下添加单击的,发现居然可以进单击的处理函数,就很懵逼,然后我就把处理双击事件的函数添加到表格的类中,那这样…

鸿蒙ArkTS中的布局容器组件(Column、Row、Flex、 Stack、Grid)

在鸿蒙ArkTS中,布局容器组件有很多,常见的有:   ⑴ Column:(垂直布局容器):用于将子组件垂直排列。   ⑵ Row:(水平布局容器):用于将子组件水…

Qt低版本多网卡组播bug

原文地址 最近在某个项目中,发现了一个低版本Qt的bug,导致组播无法正常使用,经过一番排查,终于找到了原因,特此记录。 环境 Qt:5.7.0 mingw32操作系统:windows 11 现象 在Qt5.7.0版本中&…

RPC核心实现原理

目录 一、基本原理 二、详细步骤 三、额外考虑因素 RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,也是一种用于实现分布式系统中不同节点之间进行通信和调用的技术。其实现原理主要可以分为以下几个步骤&…

Android Studio加载旧的安卓工程项目报错处理

文章目录 Invalid Gradle JDK configuration foundNDK not configuredCMake 3.10.2 was not found安装cmake适配cmake版本号 com.intellij.openapi.externalSystem.model.ExternalSystemExceptiongradle版本过低或下载不了下载gradle与依赖库超时替换gradle国内源替换Maven 仓库…

电路原理:电阻桥。

电路的基础是电阻电路。电阻电路有两种基本接线方法(串连和并连,二者有不同的解算与用法:串连分压、并连分流)。电阻电路就是使用基本接线方法的组合方案,其解算方法主要内容是判断好整体布局以及各个局部的串并连关系…

Pytorch训练时报nan

0. 引言 Pytorch训练时在batchN时loss为nan。经过断点检查发现在batchN-1时,网络参数非nan,输出非nan,但梯度为nan,导致网络参数已经全部被更新为nan,遇到这种情况应该如何排查,如何避免?由于导…

全星魅-物联网定位终端-北斗定位便携终端-北斗有源终端

在当今快速发展的物流运输行业中,精准定位与实时监控已成为确保货物安全与高效运输的关键因素。为了满足这一需求,QMCZ10作为一款集4G(LTE Cat1)通讯技术与智能定位功能于一体的终端产品,应运而生。它不仅具备普通定位…

银行卡二要素核验 API 对接说明

本文将介绍一种 银行卡二要素核验 API 对接说明,它可用于校验姓名和银行卡号的真实性和一致性。 接下来介绍下 银行卡二要素核验 API 的对接说明。 注册链接 点击链接注册,即可使用! 申请流程 要使用 API,需要先到 银行卡二要…

关于elementui el-radio 赋值问题

今天遇到这样的问题&#xff1a; 点击的时候&#xff0c;同时选中 照抄官网&#xff01; 后来发现了问题&#xff1a; 也就是说如果你的版本太低&#xff0c;就不能用value&#xff0c;而得用label&#xff0c;于是修改 <el-radio-group v-model"searchTime"&g…

Python 大数据展示屏实例

在当今数据驱动的时代&#xff0c;有效地展示大数据对于企业和组织来说至关重要。Python 提供了丰富的库和工具&#xff0c;可以帮助我们创建令人印象深刻的大数据展示屏。在这篇博客中&#xff0c;我们将通过一个实际的实例来展示如何使用 Python 构建一个简单的大数据展示屏&…

查缺补漏---子网划分方法(定长与不定长子网)

第一类题型&#xff1a; 方法&#xff1a;切蛋糕 例1&#xff1a; 现将一个 IP 网络划分成4个子网&#xff0c;若其中一个子网是 172.16.1.128/26&#xff0c;则下列网络中&#xff0c;不可能是另外三个子网之一的是&#xff08;&#xff09; A.172.16.1.0/25 B.172…

P11229 [CSP-J 2024] 小木棍

[CSP-J 2024] 小木棍 题目描述 小 S 喜欢收集小木棍。在收集了 n n n 根长度相等的小木棍之后&#xff0c;他闲来无事&#xff0c;便用它们拼起了数字。用小木棍拼每种数字的方法如下图所示。 现在小 S 希望拼出一个正整数&#xff0c;满足如下条件&#xff1a; 拼出这个数…

嵌入式开发之进程函数

1、进程创建-fork #include <unistd.h> pid_t fork(void); 创建新的进程&#xff0c;失败时返回-1成功时父进程返回子进程的进程号&#xff0c;子进程返回0通过fork的返回值区分父进程和子进程 pid_t pid; //fork子进程之后&#xff0c;子进程和父进程会同时继续往下执行…

Axios 的 responseType 属性详解及 Blob 与 ArrayBuffer 解析

在前端开发的广阔天地中&#xff0c;Axios 犹如一颗璀璨的明星&#xff0c;为我们与服务器之间的通信搭建起坚实的桥梁。其中&#xff0c;responseType 属性更是赋予了我们灵活处理服务器响应的强大能力。 一、Axios 的 responseType 属性值及示例 1.arraybuffer 当我们将 r…

在PHP中使用UTF-8编码防止乱码需要注意以下几点‌:

在PHP中使用UTF-8编码防止乱码需要注意以下几点‌&#xff1a; ‌设置PHP文档编码为UTF-8‌&#xff1a;在PHP代码的最开始使用header()函数设置文档的编码为UTF-8。例如&#xff1a;header("Content-Type: text/html; charsetutf-8");‌12。 ‌确保文件编码为UTF-8…