如果您在构建 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 安全指南。