跳到主要内容

沙箱

进程沙箱是 Chromium 的操作系统级限制。渲染进程被放进沙箱后,即使页面脚本或渲染引擎出现漏洞,这个进程能做的系统调用也很少。

webPreferences.sandbox 自 Electron 20 起默认为 true。官方文档同时说明两点:

  • 它和 nodeIntegration 不是同一个开关。沙箱开启后,预加载脚本只能使用有限的 Electron API。
  • nodeIntegration: true 会自动关闭沙箱。
  • 关闭 contextIsolation 也会关闭沙箱,即使你把 sandbox 写成 true。

沙箱里的预加载脚本​

可以 require('electron') 并使用 ipcRenderer、contextBridge、webFrame 等模块。不能 require('fs') 或任意 npm 包。需要读文件时,发 IPC 给主进程。

和上下文隔离的分工​

机制限制的是什么
nodeIntegration: false页面脚本不能直接调用 Node
contextIsolation: true页面脚本不能碰预加载脚本的 JavaScript 对象
sandbox: true渲染进程的操作系统权限

三层一起开,才是官方安全清单里的基线。

还可以用应用级开关强制所有渲染进程进入沙箱。个别窗口若因为遗留代码关掉沙箱,要在代码里写明原因。

相关文档​