Electron安全问题

如果在构建Electron应用时不保持警惕,则可能会将应用的用户置于明显的数字危险中。 像XSS(跨站点脚本)和远程代码执行之类的攻击实际上可以使攻击者深入访问您应用中的数据-甚至潜在地访问底层操作系统。

尤其是在“公开”工作时,即作为一个开源项目,您肯定要考虑通过代码签名和完整性检查来加强您的应用程序。 (请参见“提示”部分)

WARNING

在任何情况下,都不应在启用Node.js集成的情况下加载和执行远程代码。 相反,仅使用本地文件(与您的应用程序打包在一起)来执行Node.js代码。

清单:安全建议

Electron团队本身提出以下建议:

  1. 仅加载安全内容
  2. 在所有显示远程内容的渲染器中禁用Node.js集成。 如何在Quasar中将其关闭
  3. 在加载远程内容的所有会话中使用ses.setPermissionRequestHandler()
  4. 定义一个内容安全策略(Content-Security-Policy) 并使用限制性规则(例如 script-src 'self'
  5. 不要禁用webSecurity
  6. 不要设置allowRunningInsecureContenttrue
  7. 不启用实验功能
  8. 不要使用enableBlinkFeatures
  9. <webview>: 不要使用allowpopups
  10. <webview>: 验证选项和参数
  11. 禁用或限制导航
  12. 禁用或限制新窗口的创建

除上述第3和第4项外,如果检测到这些问题之一,Electron将在开发控制台中发出警告。

提示和窍门

通信协议

您应该现在就知道这一点,但是如果您不使用https/sftp/wss,那么应用程序与外界的通信可以很容易地被篡改。无论您要构建什么,请在任何地方使用安全协议。

文件系统访问

对文件系统具有读写权限是渗透测试人员的不二之选,如果您的应用启用了这种类型的交互,请考虑使用IPC和多个窗口(具有不同的权限),以最大程度地减少攻击面。

加密

如果您的应用程序用户具有钱包地址、个人信息或其他商业秘密之类的机密,请在静止状态下对该信息进行加密,仅在需要时才在内存中对其进行解密,并确保覆盖/销毁完成操作后,将对象放入内存中。但是无论您如何处理,请遵循以下四个规则:

1.使用强大的加密算法(即防碰撞而不是md5) 2.不要发明新颖的加密类型 3.明确遵循实施说明 4.考虑用户体验

在生产版本中禁用开发人员工具

您可能不希望rogue hoody-wearing menaces在应用程序的控制台中执行以下操作:

window.location='https://evilsite.com/looks-just-like-your-app'

组合键CTRL+SHIFT+I(或Mac上的ALT+CMD+I)将打开开发工具并启用对应用程序的检查。 甚至可以进行某种程度的修改。 通过捕捉这些按键并返回“false”来防止简单的“邪恶女仆”攻击。

发布校验和(checksums)

当您构建了二进制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商店都需要签名。 在官方电子教程上了解有关它的更多信息。

使用SNYK

[Snyk.io](https://snyk.io)是一种服务、CLI甚至是GitHub集成机器人,它通过将package.json中的依赖项与其受损模块列表进行比较,来跟踪节点模块中的漏洞。 在许多情况下,他们的服务可以建议最低的更新版本,甚至提供他们自己已修补的模块。 他们还进行研究和漏洞披露。 例如,可能会吓到您,如果您正在使用压缩文件(zip,tar等)执行任何操作,请查看它们的writeup受影响的软件列表

对于真正的偏执狂

为每个平台目标使用专用的物理台式机。 如果必须使该设备保持在线状态,请确保操作系统始终处于已更新状态,并允许来自Internet/蓝牙的零入站连接(尤其是对于Shell/ssh),并运行不断的病毒和rootkit检查。

仅允许GPG签名的提交被合并,并且至少需要两名团队成员(未进行PR)进行审核和批准。

重新考虑您的node程序包管理系统:

  • 用私有的npm注册表(例如 JFrog)
  • 将您的软件包修复为已知的特定版本
  • 使用pnpm
  • 审核每个模块及其依赖项

付费给黑客

聪明的人可能已经入侵了您的项目(或基础库)。 如果您通过此应用赚钱,可以考虑获取一个[Hacker One](https://hackerone.com)帐户并进行持续的赏金奖励。 至少您将能够说服黑客遵守道德规范,并且不会将漏洞出售给竞争对手。

得到帮助

您可能会感到不知所措,因为Electron的强大功能带来了许多您从未想过的头痛问题。 如果是这种情况,请考虑联系为您带来Quasar Framework的经验丰富的开发团队,获得专家支持以对您的应用程序进行复查、审核和强化。

该页面的某些部分摘自官方的 Electron安全指南.