应用程序生命周期威胁
Tauri 应用程序由应用程序生命周期中不同时间点的许多部分组成。这里我们描述了经典的威胁以及您应该如何应对它们。
所有这些不同的步骤都将在以下章节中描述。
Tauri 是您项目的直接依赖项,我们对提交、审查、拉取请求和发布保持严格的作者控制。我们尽最大努力维护最新的依赖项,并采取行动进行更新或分支修复。其他项目可能没有得到如此良好的维护,甚至可能从未进行过审计。
请在集成它们时考虑它们的健康状况,否则,您可能在不知不觉中承担了架构债务。
当您发布应用程序时,您也发布了一个包含 Tauri 的包。影响 Tauri 的漏洞可能会影响您应用程序的安全性。通过将 Tauri 更新到最新版本,您可以确保关键漏洞已得到修补,并且不会在您的应用程序中被利用。此外,请务必保持您的编译器(rustc
)和转译器(nodejs
)最新,因为通常会有安全问题得到解决。这对于您的开发系统总体而言也是如此。
虽然 NPM 和 Crates.io 提供了许多方便的包,但选择值得信赖的第三方库是您的责任——或者用 Rust 重写它们。如果您使用受已知漏洞影响或无人维护的过时库,您的应用程序安全性和您的安稳睡眠可能会受到威胁。
使用 npm audit
和 cargo audit
等工具来自动化此过程,并依靠安全社区的重要工作。
Rust 生态系统中的最新趋势,如 cargo-vet
或 cargo crev
可以帮助进一步降低供应链攻击的可能性。要找出您所依赖的项目,您可以使用 cargo supply chain
工具。
我们强烈推荐的一种做法是,只从 git 中使用哈希修订版(最佳选择)或命名标签(次佳选择)来使用关键依赖项。这适用于 Rust 和 Node 生态系统。
我们假设您,开发人员,关心您的开发环境。您有责任确保您的操作系统、构建工具链和相关依赖项保持最新且合理安全。
我们都面临着一个真正的风险,即“供应链攻击”,这通常被认为是针对您项目直接依赖项的攻击。然而,一类日益增长的攻击直接针对开发机器,您最好直接解决这个问题。
Tauri 应用程序前端可以使用多种 Web 框架进行开发。每个框架通常都带有自己的开发服务器,该服务器通过开放端口将前端资产暴露给本地系统或网络。这允许前端在 WebView 或浏览器中进行热重载和调试。
实际上,这种连接通常既没有加密也没有默认认证。Tauri 内置的开发服务器也是如此,它将您的前端和资产暴露给本地网络。此外,这允许攻击者将自己的前端代码推送到与攻击者在同一网络中的开发设备。根据暴露的功能类型,这在最坏的情况下可能导致设备受损。
您只能在您可以安全地暴露开发设备的受信任网络上进行开发。如果不可能,您必须确保您的开发服务器对与开发设备的连接使用相互认证和加密(例如 mTLS)。
强化您的开发系统取决于各种因素和您的个人威胁模型,但我们建议遵循一些通用建议
- 切勿使用管理账户进行日常任务,例如编码
- 切勿在开发机器上使用生产秘密
- 防止秘密被检入源代码版本控制
- 使用安全硬件令牌或类似设备来减少受损系统的影响
- 保持系统最新
- 将已安装的应用程序保持在最低限度
有关更实用的操作集合,请参阅出色的安全强化集合。
当然,您可以虚拟化您的开发环境以抵御攻击者,但这并不能保护您免受针对您项目而非您机器的攻击。
如果您像大多数开发人员一样工作,那么使用源代码版本控制工具和服务提供商是开发过程中的重要一步。
为了确保您的源代码不会被未经授权的参与者修改,了解并正确设置源代码版本控制系统的访问控制非常重要。
此外,请考虑要求所有(常规)贡献者签署他们的提交,以防止恶意提交被归因于未受损或非恶意的贡献者的情况。
现代组织使用 CI/CD 来制造二进制工件。
您需要完全信任这些远程(和第三方拥有的)系统,因为它们可以访问源代码、密钥并能够修改构建,而您无法可验证地证明生成的二进制文件与您的本地代码相同。这意味着您要么信任一个信誉良好的提供商,要么将这些系统托管在您自己控制的硬件上。
在 Tauri,我们提供了一个 GitHub Workflow,用于在多个平台上进行构建。如果您创建自己的 CI/CD 并依赖第三方工具,请警惕未明确固定其版本的操作。
您应该为您发布的平台签署二进制文件。虽然这可能设置起来有些复杂且成本高昂,但最终用户希望您的应用程序可以被验证确实来自您。
如果加密密钥正确存储在硬件令牌中,即使构建系统遭到入侵,也无法泄露相关签名密钥,但可以利用它们签署恶意版本。
为了对抗构建时的后门注入,您需要您的构建是可复现的,以便您可以在本地或在另一个独立的提供商处构建时,验证构建资产完全相同。
第一个问题是,Rust 默认情况下并非完全可靠地生成可复现构建。理论上它支持这一点,但仍然存在错误,并且最近在一个发布版本中出现了问题。
您可以在 Rust 项目的公共 bug 跟踪器中跟踪当前状态。
您将遇到的下一个问题是,许多常见的前端打包工具也不会生成可复现的输出,因此打包的资产也可能破坏可复现构建。
这意味着您默认情况下无法完全依赖可复现构建,不幸的是,您需要完全信任您的构建系统。
我们已尽力使应用程序的热更新尽可能简单和安全。但是,如果您失去对清单服务器、构建服务器或二进制托管服务的控制,所有努力都将付诸东流。
如果您构建自己的系统,请咨询专业的 OPS 架构师并正确构建。
如果您正在寻找Tauri应用程序的另一个受信任的分发解决方案,我们的合作伙伴 CrabNebula 提供了一个产品:https://crabnebula.dev/cloud
我们认为 WebView 是不安全的,这使得 Tauri 在加载不受信任的用户内容时,针对 WebView 访问系统 API 实施了多项保护措施。
使用内容安全策略将锁定 WebView 可以进行的通信类型。此外,功能可以阻止不受信任的内容或脚本访问 WebView 中的 API。
我们还建议建立一种简单而安全的漏洞报告方式,类似于我们的流程。
© 2025 Tauri 贡献者。CC-BY / MIT