跳到主要内容

安全模型

Electron 把 Node.js 和网页放在同一台电脑上,所以网页里的 XSS 有机会变成对文件系统的调用。官方安全清单的核心是缩小网页能碰到的能力。

官方清单里最常被引用的几条​

  1. 只加载可信内容。远程页面不要和 Node 集成放在一起。
  2. 所有渲染进程开启上下文隔离。自 Electron 12 起这是默认值。
  3. 开启进程沙箱。自 Electron 20 起,webPreferences.sandbox 的默认值是 true。关闭上下文隔离会同时关闭沙箱。
  4. 加载远程内容的 session 上设置 setPermissionRequestHandler。
  5. 保持 webSecurity: true。
  6. 配置严格的内容安全策略,例如 script-src 'self'。
  7. 校验 shell.openExternal 的 URL,限制允许的协议。
  8. 预加载脚本只暴露必要函数,不把 Electron API 交给不可信网页。
  9. 检查 Fuses,例如关闭把应用当成 Node 运行的能力,并校验 ASAR 完整性。

推荐的窗口配置​

webPreferences: {
preload: path.join(__dirname, 'preload.js'),
nodeIntegration: false,
contextIsolation: true,
sandbox: true,
webSecurity: true,
}

主进程的 ipcMain.handle 仍要检查参数和 event.senderFrame 的 URL。上下文隔离保证页面摸不到预加载脚本里的对象,它不代替参数校验。

相关文档​