安全地访问渲染器中基于节点的模块

时间:2019-01-27 05:08:28

标签: node.js electron node-modules

读取Electron's security tutorial后,在创建nodeIntegeration实例时,我禁用了contextIsolation并启用了BrowserWindow。这样会导致渲染器无法加载依赖于NodeJS API的模块(例如require())。因此,例如,我无法使用electron-store(或electron)。

这也意味着即使我仍然无法使用IPC,我也无法使用IPC,因为它JSON序列化了我的自定义对象,这实际上通过将我的自定义对象转换为POJO来导致对象切片。

话虽如此,在主进程和渲染器进程之间进行安全通信的正确方法是什么?我想在我的主流程中创建一个Singleton应用程序实例,在渲染器流程中访问它(例如,从磁盘加载配置,然后允许用户从渲染器查看/编辑它,将更改保存回磁盘)作为安全对象尽可能。

我看过其他一些类似的主题(例如like this one),但仍然无法使用;此外,即使它起作用了,这也是一种黑客行为,如果有更好的方法我自己找不到,我想避免黑客攻击。

1 个答案:

答案 0 :(得分:0)

这取决于您内容的来源。该安全教程正确地指出,加载远程内容时应格外小心:

  

应用程序中未包含的任何资源都应使用HTTPS 1

这样的安全协议进行加载

如果您的渲染器进程的内容与您的应用程序打包在一起,那么我认为您可以对此放松一些:

function createWindow () {
  mainWindow = new BrowserWindow({width: 800, height: 600});
  mainWindow.loadFile('index.html');
}

就我而言(YMMV)index.html文件不是从HTTPS而是从文件系统加载的。该文件是我代码库的一部分,并随应用程序一起提供,我可以信任其中的所有内容。