【问题标题】:context isolation when loading local content加载本地内容时的上下文隔离
【发布时间】:2019-08-14 22:51:31
【问题描述】:

我已阅读电子安全策略文档 (https://electronjs.org/docs/tutorial/security) 和为即将推出的电子 5.x (https://electronjs.org/blog/electron-4-0) 设置的新默认值,但无法确定在加载本地 Web 内容时是否需要 contextIsolation (本地 index.html)。

我知道在加载远程内容时需要它,但是在加载本地内容时真的有必要吗? 如果是这样,应该如何使用在主进程和渲染器进程之间的预加载脚本中配置的桥 API 以便在渲染器进程的 Window 对象上公开 API?

【问题讨论】:

    标签: electron


    【解决方案1】:

    我不是安全专家,但在我看来,如果您从不加载外部内容,开启上下文隔离并不会带来太多好处。

    该标志的全部意义在于在隔离的 JavaScript 环境中运行您的预加载脚本,因此它不会受到页面对 JavaScript 全局变量或对象原型所做的任何恶意或其他更改的影响。

    例如,如果我的外部页面覆盖Date.now

    Date.now = () => return 1;
    

    而您的预加载脚本或您正在调用的 Electron API 正在调用 Date.now(),那么它将使用覆盖的版本而不是原始函数。

    contextIsolation 标志可缓解此类攻击。

    Electron says 自己(强调添加):

    远程内容

    启用上下文隔离

    所以不,本地内容不需要它。

    【讨论】:

    • 这也是我从文档中了解到的,我想确认一下。根据:electronjs.org/blog/electron-4-0 在 Electron 5 中,nodeIntegration 和 contextIsolation 的默认值将分别更改为 false 和 true,所以我想看看我没有遗漏什么...
    • @AvnerHoffmann 是的,他们只是更改了所有默认值,以便默认情况下电子应用程序更安全,但在您的情况下,您不需要启用上下文隔离标志
    【解决方案2】:

    @pushkin 的回答忽略了对您可能正在加载的任何模块的考虑。除非您信任上述模块中的代码,否则上下文隔离对于本地纯内容电子应用程序仍然有好处。

    【讨论】:

      猜你喜欢
      • 2011-08-10
      • 2017-10-23
      • 2016-10-08
      • 2017-05-01
      • 1970-01-01
      • 2015-04-28
      • 2017-02-27
      • 2011-04-20
      相关资源
      最近更新 更多