gpt4 book ai didi

javascript - 在应用程序打包的本地页面上启用 Electron 中的 nodeIntegration 是否安全?

转载 作者:行者123 更新时间:2023-11-30 13:54:54 25 4
gpt4 key购买 nike

在关闭 nodeIntegration 的情况下创建自定义窗口控件(如关闭、最小/最大和恢复)时,我被卡住了。我在渲染器的本地 html 文件中创建了按钮

main.js

mainWindow = new BrowserWindow({
x, y, width, height,
frame: false,
show: false,
webPreferences: { devTools: true }
});

mainWindow.loadURL(url.format({
protocol: 'file:',
slashes: true,
pathname: path.join(__dirname, 'assets', 'index.html')
}));

index.html

<div id='minimize' class='noSelect'>&#xE921;</div>
<div id='maximize' class='noSelect'>&#xE922;</div>
<div id='restore' class='noSelect'>&#xE923;</div>
<div id='close' class='noSelect'>&#xE8BB;</div>

<script type='text/javascript' src='../assets/js/index.js'></script>

默认情况下,nodeIntegration 处于关闭状态,因此 index.js 无法访问 Node。但是,我需要能够向按钮添加功能以关闭、最小/最大和恢复窗口。

index.js

const { remote } = require('electron');
const mainWindow = remote.getCurrentWindow();

document.getElementById('close').addEventListener('click', () => {
mainWindow.close();
});

由于 nodeIntegration 被禁用,这将无法工作。在本地页面中启用它是否安全?如果不是,执行此操作的安全方法是什么?

最佳答案

TL;DR:启用 nodeIntegration 只会在您从不受信任的来源(即互联网或用户输入)加载和执行代码时带来风险。

如果您完全确定您的应用程序只会运行您创建的代码(并且没有 NodeJS 模块从互联网加载脚本),基本上,如果启用 nodeIntegration 则风险很小.

但是,如果您允许用户运行代码(即输入然后eval)或者您提供插件 API,您无法从中控制加载的插件,风险级别上升,因为 NodeJS 允许任何 NodeJS 脚本,例如,操作文件系统。

另一方面,如果禁用 nodeIntegration,则无法与主进程通信或操作 BrowserWindow,因此无法创建自定义窗口控件。但是,您可以使用“预加载”脚本文件在完全隔离的渲染器和 NodeJS 世界之间架起一座桥梁。

这是通过创建一个脚本文件来完成的,然后在创建时将该脚本文件作为 preload: 配置选项传递给 BrowserWindowElectron's documentation有一些示例可以帮助您入门。此外,熟悉 Eelectron's security recommendations 也是个好主意。 .

关于javascript - 在应用程序打包的本地页面上启用 Electron 中的 nodeIntegration 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57505082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com