【问题标题】: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),但它仍然不起作用;此外,即使它有效,它也是一种黑客攻击,如果有更好的方法,我想避免黑客攻击。

【问题讨论】:

    标签: node.js electron node-modules


    【解决方案1】:

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

    应用程序中未包含的任何资源都应使用 HTTPS 等安全协议进行加载 1

    如果你的渲染器进程的内容是和你的应用一起打包的,我觉得你可以放轻松一点:

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

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

    【讨论】:

      猜你喜欢
      • 2016-11-26
      • 1970-01-01
      • 2017-05-01
      • 2021-06-22
      • 2015-12-28
      • 2020-01-28
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      相关资源
      最近更新 更多