安全模型
Electron 把 Node.js 和网页放在同一台电脑上,所以网页里的 XSS 有机会变成对文件系统的调用。官方安全清单的核心是缩小网页能碰到的能力。
官方清单里最常被引用的几条
- 只加载可信内容。远程页面不要和 Node 集成放在一起。
- 所有渲染进程开启上下文隔离。自 Electron 12 起这是默认值。
- 开启进程沙箱。自 Electron 20 起,
webPreferences.sandbox的默认值是true。关闭上下文隔离会同时关闭沙箱。 - 加载远程内容的 session 上设置
setPermissionRequestHandler。 - 保持
webSecurity: true。 - 配置严格的内容安全策略,例如
script-src 'self'。 - 校验
shell.openExternal的 URL,限制允许的协议。 - 预加载脚本只暴露必要函数,不把 Electron API 交给不可信网页。
- 检查 Fuses,例如关闭把应用当成 Node 运行的能力,并校验 ASAR 完整性。
推荐的窗口配置
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
nodeIntegration: false,
contextIsolation: true,
sandbox: true,
webSecurity: true,
}
主进程的 ipcMain.handle 仍要检查参数和 event.senderFrame 的 URL。上下文隔离保证页面摸不到预加载脚本里的对象,它不代替参数校验。