安全访问渲染器进程中基于节点的模块
Posted
技术标签:
【中文标题】安全访问渲染器进程中基于节点的模块【英文标题】:Access node-based modules in renderer process securely 【发布时间】:2019-06-20 11:12:42 【问题描述】:阅读Electron's security tutorial 后,我在创建BrowserWindow
的实例时禁用了nodeIntegeration
并启用了contextIsolation
。这会导致渲染器无法加载依赖于 NodeJS API 的模块(例如 require()
)。因此,例如,我无法使用electron-store
(或electron
)。
这也意味着我无法使用 IPC,即使我无论如何也无法使用 IPC,因为它 JSON 序列化了我的自定义对象,这实际上通过将我的自定义对象转换为 POJO 来导致对象切片。
话虽如此,在主进程和渲染器进程之间安全通信的正确方法是什么。我想在我的主进程中创建一个单例应用程序实例,在渲染器进程中访问它(例如,从磁盘加载配置,然后允许用户从渲染器查看/编辑它,将更改保存回磁盘)尽可能。
我查看了一些其他类似的主题(例如,like this one),但它仍然不起作用;此外,即使它有效,它也是一种黑客攻击,如果有更好的方法,我想避免黑客攻击。
【问题讨论】:
【参考方案1】:这取决于您的内容来自哪里。安全教程正确地指出,在加载远程内容时应格外小心:
应用程序中未包含的任何资源都应使用 HTTPS 等安全协议进行加载 1
如果你的渲染器进程的内容是和你的应用一起打包的,我觉得你可以放轻松一点:
function createWindow ()
mainWindow = new BrowserWindow(width: 800, height: 600);
mainWindow.loadFile('index.html');
在我的情况下 (YMMV),index.html
文件不是从 HTTPS 加载的,而是从文件系统加载的。该文件是我的代码库的一部分,并与应用程序本身一起提供,我可以信任其中的所有内容。
【讨论】:
以上是关于安全访问渲染器进程中基于节点的模块的主要内容,如果未能解决你的问题,请参考以下文章