跳至主要内容

开发安全

无论你是否喜欢,如今的应用程序都运行在操作系统中,这些操作系统可能会(并且经常会)受到各种攻击的入侵。当你的不安全应用程序成为这种横向移动进入操作系统的网关时,你就是在为专业黑客提供的工具添砖加瓦。别成为工具。

这就是为什么我们抓住每一个机会来帮助你保护你的应用程序,防止对系统级接口的未授权访问,并制造防弹的应用程序。你的用户假设你遵循最佳实践。我们让这变得容易,但你仍然应该了解以下信息。

安全是共同的责任

重要的是要记住,你的 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 并依赖于第三方工具,请注意你没有明确固定版本的动作。

你应该为你要发布的平台签名你的二进制文件,虽然这可能很复杂且设置成本较高,但最终用户期望你的应用程序可以验证是你提供的。

运行时威胁

我们假设 webview 是不安全的,这导致 Tauri 在加载不受信任的用户空间内容的上下文中实现了几个关于 webview 访问系统 API 的保护措施。

你可以在下面阅读更多详细信息,但是使用 CSP 将锁定 Webview 可以进行的通信类型。此外,上下文隔离 可防止不受信任的内容或脚本访问 Webview 内的 API。

并且请记住,无论你做什么,都**不要**信任在 Webview 中使用私钥进行加密的结果。Rust 是有原因存在的。

更新程序威胁

我们已经尽最大努力使向应用程序发布热更新尽可能简单和安全。但是,如果你失去了对清单服务器、构建服务器或二进制托管服务的控制,那么所有保证都失效了。如果你构建你自己的系统,请咨询专业的 OPS 架构师并正确构建它。

安全的 Content Loading

Tauri 限制了你的 HTML 页面的内容安全策略 (CSP)。本地脚本已哈希化,样式和外部脚本使用加密的 nonce 进行引用,这可以防止加载未经授权的内容。

危险

避免加载远程内容,例如通过 CDN 提供的脚本,因为它们会引入攻击媒介。但任何不受信任的文件都可能引入新的和细微的攻击媒介。

只有当 Tauri 配置文件中设置了[tauri > security > csp]时,才会启用 CSP 保护。你应该将其限制得尽可能严格,只允许 webview 加载你信任的(最好是你拥有的)主机的资源。在编译时,Tauri 会自动将它的 nonce 和哈希添加到相关的 CSP 属性中,因此你只需要担心对你应用程序来说唯一的内容。

有关此保护的更多信息,请参阅script-srcstyle-srcCSP 资源