加载本地内容时的上下文隔离

时间:2019-03-24 15:12:33

标签: electron

我已经阅读了电子安全政策文档(https://electronjs.org/docs/tutorial/security)和即将到来的电子5.x(https://electronjs.org/blog/electron-4-0)设置的新默认值,无法确定何时需要contextIsolation加载本地Web内容(local index.html)。

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

2 个答案:

答案 0 :(得分:1)

我不是安全专家,但是在我看来,如果您从不加载外部内容,那么从上下文隔离中获得的好处并不多。

该标志的全部目的是在一个隔离的JavaScript环境中运行您的预加载脚本,因此该页面不受JavaScript全局变量或对象原型的任何更改(恶意或其他更改)的影响。

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

Date.now = () => return 1;

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

contextIsolation标志可缓解这种类型的攻击。<​​/ p>

电子says本身(添加了重点):

  

远程内容

启用上下文隔离

因此,您不需要本地内容。

答案 1 :(得分:1)

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