开发安全
无论您喜欢与否,现在的应用程序都运行在操作系统中,而这些操作系统会 (而且是经常) 因大量的攻击而遭受损害。 当您不安全的应用成为骇客踏入用户操作系统的垫脚石时,您等于是在构建一款任由专业骇客掌控的工具。 不要让您的应用成为工具人!
这就是为什么我们抓住每一个机会帮助您保护应用程序的安全性,防止未经授权的访问系统级接口,并制作防护严密的应用程序的原因。 您的用户会假设您各方各面都做到尽善尽美。 虽然我们让安全变得简单,但您也应该将下列信息放在心上。
安全乃社群之责任
需要牢记的是,您的 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 实现了在可加载不受信代码的用户环境下的对系统 API 的多重保护。
您可以在下方了解详情,但使用 CSP 政策会限制 WebView 可使用的交流种类。 除此之外,上下文隔离功能防止不受信内容或脚本从 WebView 内使用 API。
另外,请务必不要相信 WebView 内使用私钥的加解密结果。 Rust 的存在是有理由的。
更新威胁
我们已尽最大努力使应用程序的热更新的运送尽可能简单、安全。但是,如果您失去了对清单服务器、构建服务器或二进制托管服务的控制的话,这一切努力都将付之东流。 若您要构建自己的系统的话,请咨询专业 OPS 架构师的建议并根据其正确地搭建。
安全内容加载
Tauri 对您的 HTML 页面强制应用内容安全策略(CSP)。 本地脚本经过哈希处理,同时样式、外部脚本经由加密 Nonce 引用,防止禁止内容被加载。
请尽量避免加载远程内容,比如从 CDN 加载的脚本可能会引入新的攻击向量。 但实际上,任何不受信任的文件都有可能引入新的和不易察觉的攻击向量。
安全内容加载功能仅在 Tauri 配置文件中的 [tauri > security > csp]
选项设置时开启。 您应该尽可能地限制从外部加载内容,仅允许 WebView 从您信任且最好能控制的服务器加载资源。 在编译时,Tauri 会自动将 Nonce 和哈希添加到相应的 CSP 属性中。所以,您仅仅需要关心您的应用本身即可。
请参见 script-src
、style-src
及 CSP 来源以了解此保护手段的详情。