读取Electron's security tutorial后,在创建nodeIntegeration
实例时,我禁用了contextIsolation
并启用了BrowserWindow
。这样会导致渲染器无法加载依赖于NodeJS API的模块(例如require()
)。因此,例如,我无法使用electron-store
(或electron
)。
这也意味着即使我仍然无法使用IPC,我也无法使用IPC,因为它JSON序列化了我的自定义对象,这实际上通过将我的自定义对象转换为POJO来导致对象切片。
话虽如此,在主进程和渲染器进程之间进行安全通信的正确方法是什么?我想在我的主流程中创建一个Singleton应用程序实例,在渲染器流程中访问它(例如,从磁盘加载配置,然后允许用户从渲染器查看/编辑它,将更改保存回磁盘)作为安全对象尽可能。
我看过其他一些类似的主题(例如like this one),但仍然无法使用;此外,即使它起作用了,这也是一种黑客行为,如果有更好的方法我自己找不到,我想避免黑客攻击。
答案 0 :(得分:0)
这取决于您内容的来源。该安全教程正确地指出,加载远程内容时应格外小心:
应用程序中未包含的任何资源都应使用HTTPS 1
这样的安全协议进行加载
如果您的渲染器进程的内容与您的应用程序打包在一起,那么我认为您可以对此放松一些:
function createWindow () {
mainWindow = new BrowserWindow({width: 800, height: 600});
mainWindow.loadFile('index.html');
}
就我而言(YMMV)index.html
文件不是从HTTPS而是从文件系统加载的。该文件是我代码库的一部分,并随应用程序一起提供,我可以信任其中的所有内容。