【问题标题】:What are the limitations of disabling nodeIntegration in Electron?在 Electron 中禁用 nodeIntegration 有什么限制?
【发布时间】:2019-07-24 06:30:09
【问题描述】:

在 Electron 的 docs 中,它允许我们启用或禁用 nodeIntegration(默认禁用)。禁用时,它是禁用整个应用程序使用 node.js 功能还是仅禁用某个进程(主进程、渲染器进程和自定义模块)?

我听说使用 nodeIntegration 时存在安全问题。它们是什么?

我的应用程序可能只会被我自己用作个人物品。它将包括一个localhost 服务器、一个自定义 API、一个通​​过我的自定义 API 访问并使用外部 API 的远程 MongoDB 数据库。如果 node.js 被禁用,我将如何开发这个应用程序?

【问题讨论】:

    标签: javascript node.js electron


    【解决方案1】:
    1. 只有渲染器进程会受到影响。主进程将始终可以访问 node.js api。

    2. 将 node.js api 暴露到渲染器进程会暴露本地系统的安全问题 - 这意味着渲染器进程中的任何 XSS 都可以具有系统访问权限(如 fschild_process)。通常渲染器进程是沙盒的,因此 XSS 仅限于其范围。

    3. 即使在禁用节点集成后,preload 脚本也可以始终访问 node.js。预加载脚本可用于为渲染器进程准备接口,仅公开所需的访问/限制,验证输入攻击。

    【讨论】:

    • 因此最好将其禁用并在创建窗口以处理 API 和本地主机服务器的主进程中需要自定义模块,而不会在处理正常时访问任何这些并且容易受到 XSS 攻击渲染器进程中的Javascript?
    • it would be good to leave it disabled and require custom modules in the main process:是的,实现可能会因您的应用程序架构而异。使用预加载是一种快速的方法,或者如果您的主进程已经拥有它,您可以使用 localhost 但个人不建议在主进程中大量使用 localhost 服务器。
    • 我现在制作这个的唯一操作系统是 Windows。我的服务器实际上不在主进程中。它从启动 express 服务器的自定义模块中获取。你会推荐什么,为什么?我需要能够使用MongoDB 来访问远程数据库。
    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 2021-05-08
    • 2017-11-02
    • 2018-06-05
    • 2021-06-05
    • 2021-09-03
    • 2020-04-10
    • 1970-01-01
    相关资源
    最近更新 更多