如果您在构建 Electron 应用程序时没有保持警惕,那么您可能会将应用程序的用户置于实际的数字危险之中。诸如 XSS(跨站点脚本)和远程代码执行之类的事情实际上可以让攻击者深入访问应用程序中的数据,甚至可能访问底层操作系统。
尤其是在“公开”工作时,例如作为开源项目,您肯定需要考虑使用代码签名和完整性检查来强化您的应用程序。(请参阅“提示”部分)
警告
在任何情况下,您都不应加载和执行远程代码。相反,仅使用本地文件(与您的应用程序一起打包)在主线程和/或预加载脚本中执行 Node.js 代码。
清单:安全建议
Electron 团队本身提出了以下建议
- 确保您将
webPreferences
>contextIsolation
设置为true
。使用 预加载脚本 仅将必须的 API 注入渲染线程。 - 如果您必须加载远程内容并且无法解决此问题,则 仅加载安全内容
- 在加载远程内容的所有会话中使用
ses.setPermissionRequestHandler()
- 不要禁用
webSecurity
- 不要将
allowRunningInsecureContent
设置为true
- 不要启用实验性功能
- 不要使用
enableBlinkFeatures
<webview>
:不要使用allowpopups
<webview>
:验证选项和参数- 禁用或限制导航
- 禁用或限制创建新窗口
除了上述第 3 和第 4 项之外,如果检测到其中一个问题,Electron 将在开发控制台中发出警告。
提示与技巧
通信协议
您现在应该知道这一点,但如果您没有使用 **https** / **sftp** / **wss**,则应用程序与外部世界的通信很容易被篡改。无论您构建什么,请在任何地方都使用安全的协议。
文件系统访问
拥有对文件系统的读写权限是渗透测试人员的圣杯,如果您的应用程序启用了这种类型的交互,请考虑使用 IPC 和多个窗口(具有不同的权限)以最大程度地减少攻击面。
加密
如果您的应用程序的用户拥有诸如钱包地址、个人信息或其他某种商业机密之类的秘密,请在静止时将这些信息加密,仅在需要时在内存中解密,并确保在完成操作后覆盖/销毁内存中的对象。但是,无论您如何处理此问题,请遵循以下四条规则
- 使用强大的加密(例如抗冲突且不是 md5)
- 不要发明一种新型的加密
- 明确遵循实施说明
- 考虑用户体验
在生产环境中禁用开发者工具
您可能不希望流氓的戴兜帽的人在您的应用程序的控制台中执行类似以下内容的操作
window.location='https://evilsite.com/looks-just-like-your-app'
组合键 CTRL+SHIFT+I(或 Mac 上的 ALT+CMD+I)将打开开发工具并启用应用程序的检查。它甚至可以启用一定程度的修改。通过捕获这些按键并 return false
来防止简单的 evil maid
攻击。
发布校验和
当您构建二进制 Blob 并想要发布它们(例如在 GitHub 上)时,请使用 shasum
并将这些结果发布在显眼的位置(例如在项目的 GitHub 发布页面上)以及潜在的公共区块链上,例如 Steem。
$ shasum -a 256 myApp-v1.0.0_darwin-x64.dmg
40ed03e0fb3c422e554c7e75d41ba71405a4a49d560b1bf92a00ea6f5cbd8daa myApp-v1.0.0_darwin-x64.dmg
签名构建
虽然不是共享应用程序的硬性要求,但代码签名是一种最佳实践——并且 MacOS 和 Windows 商店都要求这样做。在以下位置详细了解: 官方 Electron 教程。
使用 SNYK
Snyk.io 是一项服务,提供 CLI 甚至 GitHub 集成机器人,它通过将您 `package.json` 中的依赖项与受损模块列表进行比较来跟踪节点模块中的漏洞。在许多情况下,他们的服务可以推荐最低更新版本,甚至提供他们自己已修复的模块。他们还进行研究和漏洞披露。例如,如果您正在使用压缩文件(zip、tar 等)进行任何操作,请查看他们的 文章 和 受影响软件列表。
对于真正偏执的人
为每个平台目标使用专用的物理台式机。如果您必须使此设备保持在线状态,请确保操作系统始终更新,不允许来自互联网/蓝牙的任何传入连接(特别是对于 shell/ssh),并持续运行病毒和 rootkit 检查。
仅允许合并 GPG 签名的提交,并要求至少两名团队成员(未创建 PR 的成员)审查并批准提交。
重新考虑您的节点包管理系统
- 使用私有 npm 注册表(例如 JFrog)
- 将您的包修复到已知可用的特定版本
- 使用 pnpm
- 审核每个模块及其依赖项
付费被黑
某个聪明人可能已经入侵了您的项目(或底层库)。如果您正在通过此应用程序赚钱,请考虑获取 Hacker One 帐户并持续运行赏金奖励。至少,您将能够说服黑客保持道德,并且不将漏洞出售给您的竞争对手。
寻求帮助
您可能会感到不知所措,因为 Electron 的强大功能带来了许多您从未想过要考虑的麻烦。如果是这种情况,请考虑 联系我们 并让经验丰富的开发人员团队(为您带来 Quasar 框架的团队)为您的应用程序提供审查、审计和加固方面的专家支持。
本页面部分内容摘自官方的 Electron 安全指南。