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

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 加载的,而是从文件系统加载的。该文件是我的代码库的一部分,并与应用程序本身一起提供,我可以信任其中的所有内容。

【讨论】:

以上是关于安全访问渲染器进程中基于节点的模块的主要内容,如果未能解决你的问题,请参考以下文章

需要啥安全访问模块 (SAM)?

从 Angular 组件访问 Electron API

04.electron-(使用remove模块及安全策略)

原创访问Linux进程文件表导致系统异常复位的排查记录

基于 Nginx + ModSecurity V3 实现对 web 流量的安全访问控制

AutoSAR 标准--基础安全特性