开发安全性
无论你是否喜欢,当今的应用程序都存在于可能(并且定期)受到各种攻击影响的操作系统中。当你的不安全应用程序成为此类横向移动进入操作系统的网关时,你就是在为专业黑客提供的工具做出贡献。不要成为工具。
这就是我们竭尽所能帮助你保护应用程序、防止对系统级界面的不必要访问并制造防弹应用程序的原因。你的用户认为你正在遵循最佳实践。我们让它变得容易,但你仍应了解以下信息。
安全性是一项社区责任
请务必记住,Tauri 应用程序的安全性取决于 Tauri 本身、所有 Rust 和 npm 依赖项、您的代码以及运行最终应用程序的设备的整体安全性。Tauri 团队会尽力做好自己的部分,安全社区也会做好自己的部分,您也应该遵循一些重要的最佳实践。
保持应用程序最新
当将应用程序发布到外部环境时,您也会发布其中包含 Tauri 的捆绑包。影响 Tauri 的漏洞可能会影响应用程序的安全性。通过将 Tauri 更新到最新版本,您可以确保已修补关键漏洞,并且无法在应用程序中利用这些漏洞。还务必保持编译器 (rustc) 和转换器 (nodejs) 的最新状态,因为通常会解决安全问题。
评估您的依赖项
虽然 npm 和 Crates.io 提供了许多便捷的软件包,但选择可信赖的第三方库(或使用 Rust 重写这些库)是您的责任。如果您确实使用了受已知漏洞影响或未维护的过时库,则您的应用程序安全性以及安稳的睡眠可能会受到威胁。使用 npm audit 和 cargo audit 等工具来自动执行此过程,并依靠安全社区的重要工作。
采用更安全的编码实践
应用程序的第一道防线是您自己的代码。尽管 Tauri 可以保护您免受常见的 Web 漏洞(例如基于跨站点脚本的远程代码执行)的影响,但配置不当可能会对安全性产生影响。即使并非如此,也强烈建议采用安全的软件开发最佳实践并执行安全测试。我们将在下一部分详细说明这意味着什么。
教育您的用户
真正的安全性意味着不会发生意外行为。因此,从某种意义上说,更安全意味着安心地知道,只有您希望发生的事情才会发生。然而,在现实世界中,这是一个乌托邦式的“梦想”。但是,通过尽可能地移除许多媒介并在坚实的基础上构建,您选择 Tauri 向您的用户表明您关心他们、他们的安全和他们的设备。
威胁模型
Tauri 应用程序在生命周期的不同点由许多部分组成。这里我们描述经典威胁以及您应该如何应对这些威胁。
上游威胁
Tauri 是您项目的直接依赖项,我们对提交、审查、拉取请求和发布保持严格的创作控制。我们尽力维护最新的依赖项,并采取行动更新或分叉并修复。其他项目可能没有得到很好的维护,甚至可能从未经过审计。在集成它们时请考虑它们的运行状况,否则,您可能在不知不觉中采用了架构债务。
开发威胁
我们假设您作为开发人员关心您的开发环境。您负责确保您的操作系统、构建工具链和关联的依赖项保持最新状态。
我们所有人面临的一个真正的风险是所谓的“供应链攻击”,通常被认为是对您项目的直接依赖项的攻击。然而,野外越来越多的攻击直接针对开发机器,而您最好直接解决这个问题。
我们强烈推荐的一种做法是,仅使用哈希修订版(最好)或命名标记(次好)从 git 中获取关键依赖项。这适用于 Rust 以及 Node 生态系统。此外,请考虑要求所有贡献者对他们的提交进行签名,并保护 Git 分支和管道。
构建时威胁
现代组织使用 CI/CD 来制造二进制制品。在 Tauri,我们甚至提供了一个 GitHub 工作流,用于在多个平台上构建。如果您创建自己的 CI/CD 并依赖于第三方工具,请注意您尚未明确固定的操作版本。
您应该为要发布到的平台签名二进制文件,虽然这可能很复杂且设置成本有点高,但最终用户希望您的应用程序可以验证确实来自您。
运行时威胁
我们假设 Web 视图不安全,这导致 Tauri 实施了多项保护措施,以针对在加载不受信任的用户空间内容时 Web 视图访问系统 API。
您可以在下面阅读更详细的内容,但使用 CSP 将锁定 Web 视图可以进行的通信类型。此外,上下文隔离 阻止不受信任的内容或脚本访问 Web 视图中的 API。
请无论如何,不要信任在 Web 视图中使用私钥进行加密的结果。Rust 存在是有原因的。
更新程序威胁
我们已尽最大努力使向应用程序发布热更新尽可能简单和安全。但是,如果您失去了对清单服务器、构建服务器或二进制文件托管服务的控制,那么一切赌注都无效。如果您构建自己的系统,请咨询专业 OPS 架构师并正确构建它。
安全内容加载
Tauri 限制了 HTML 页面的内容安全策略 (CSP)。本地脚本已哈希,样式和外部脚本使用加密随机数进行引用,这可以防止加载不允许的内容。
避免加载远程内容,例如通过 CDN 提供的脚本,因为它们会引入攻击媒介。但任何不受信任的文件都可能引入新的和微妙的攻击媒介。
仅当在 Tauri 配置文件中设置[tauri > security > csp]
时,才会启用 CSP 保护。您应该尽可能限制它,只允许 Web 视图从您信任且最好是您自己的主机加载资产。在编译时,Tauri 会自动将其随机数和哈希附加到相关的 CSP 属性,因此您只需要关注对您的应用程序来说独一无二的内容。
有关此保护的更多信息,请参见script-src
、style-src
和CSP 源。