HoRain云--Electron 安全性

HoRain云--Electron 安全性
Electron 结合了Node.js 与浏览器环境这让桌面应用功能非常强大但也带来一定的安全风险。正确的安全策略可以降低 XSS、远程代码执行RCE和数据泄露的风险。安全检查清单与常见隐患安全检查清单启用上下文隔离contextIsolation使用预加载脚本preload.js暴露安全 API不在渲染进程中直接使用 Node.js 模块启用沙箱模式sandbox: true配置内容安全策略CSP安全使用 IPC验证来源和输入限制应用访问系统权限遵循最小权限原则避免加载不可信的远程内容常见安全隐患远程内容注入加载未知 URL 或 HTML 文件可能执行恶意 JS不安全的 IPC 调用渲染进程可调用任意主进程方法Node.js 任意执行在渲染进程启用nodeIntegration可被利用执行系统命令XSS 攻击用户输入直接渲染到页面依赖漏洞使用未更新的第三方库上下文隔离Context IsolationcontextIsolation 详解上下文隔离允许渲染进程和主进程在不同的 JS 环境中运行。渲染进程的网页 JS 无法直接访问 Node.js API而是通过安全的预加载脚本暴露接口。const mainWindow new BrowserWindow({ webPreferences: { contextIsolation: true, // 启用上下文隔离 preload: path.join(__dirname, preload.js), nodeIntegration: false // 禁止在渲染进程使用 Node.js } })为什么需要上下文隔离防止加载的网页或第三方脚本直接访问 Node.js避免攻击者通过 XSS 获取系统权限保持渲染进程只处理 UI主进程处理系统操作迁移到隔离上下文使用contextBridge.exposeInMainWorld暴露安全 API所有系统操作放到主进程通过 IPC 调用示例// preload.js const { contextBridge, ipcRenderer } require(electron) contextBridge.exposeInMainWorld(api, { getData: () ipcRenderer.invoke(get-data) })渲染进程只调用window.api.getData()无法直接操作系统。沙箱模式Sandbox启用沙箱沙箱模式让渲染进程像浏览器普通网页一样运行完全隔离 Node.js 环境。const mainWindow new BrowserWindow({ webPreferences: { sandbox: true, contextIsolation: true, preload: path.join(__dirname, preload.js) } })沙箱限制与应对限制渲染进程无法直接访问 Node.js 模块应对方法通过 IPC 调用主进程提供的安全方法优势增强安全性防止恶意脚本破坏系统内容安全策略CSPCSP 可以防止 XSS 和数据注入攻击通过限制网页可加载的资源来源。CSP 配置示例meta http-equivContent-Security-Policy content default-src self; script-src self; style-src self unsafe-inline; img-src self data:; connect-src self https://api.example.com;说明default-src self默认只允许同源资源script-src self只允许本地脚本style-src self unsafe-inline允许内联样式connect-src限制 AJAX / WebSocket 请求域防止 XSS 攻击永远不要在渲染进程直接使用innerHTML显示用户输入对用户输入进行转义或使用框架模板渲染安全的 IPC 通信验证消息来源主进程应区分渲染进程来源避免任意执行。示例ipcMain.handle(do-action, (event, data) { if (event.senderFrame.url.startsWith(file://)) { // 安全来源执行操作 } else { console.warn(不安全的 IPC 请求被阻止) } })输入验证所有通过 IPC 传入的数据都应验证类型和范围避免注入恶意命令或文件路径function validateInput(data) { if (typeof data ! string || data.length 100) throw new Error(非法输入) return data }最小权限原则仅暴露必要功能给渲染进程不要把全部 Node.js API 或系统权限暴露出去使用预加载脚本控制接口访问范围小结Electron 安全最佳实践核心是隔离 验证 限权隔离启用上下文隔离、沙箱模式验证CSP、防 XSS、IPC 输入验证限权最小化渲染进程权限只提供必要 API遵循这些原则可以大幅降低桌面应用被攻击或数据泄露的风险。