在 Tauri 项目里,安全不仅仅是应用运行时的权限控制,还取决于你引入了哪些第三方依赖。一个小的漏洞就可能让整个应用的防线失守。因此,对 Rust 和前端两部分的依赖进行持续审计与漏洞扫描,应当成为日常开发流程的一部分。
1. Rust 依赖审计:cargo-audit
Rust 生态提供了官方的漏洞数据库 RustSec Advisory Database,配合 cargo-audit 工具可以直接扫描 Cargo.lock 中是否存在已知漏洞。
安装
cargo install cargo-audit
(确保你的 Rust 工具链是最新的,以避免兼容性问题。)
使用方法
在项目根目录(包含 Cargo.toml 和 Cargo.lock 的目录)执行:
cargo audit
它会读取 Cargo.lock,比对 RustSec 数据库,输出所有发现的漏洞,包括严重等级、影响的 crate 名称、受影响版本范围以及修复建议。
常见输出示例:
Crate: time
Version: 0.1.44
Title: Potential segfault in the time crate
Date: 2020-11-18
ID: RUSTSEC-2020-0071
URL: https://rustsec.org/advisories/RUSTSEC-2020-0071
Solution: Upgrade to >=0.2.23
集成到 CI/CD
在 GitHub Actions 或其它 CI 中,可以添加一个步骤:
- name: Security audit
run: cargo audit
如果存在漏洞(尤其是高危漏洞),可以让 CI 失败,阻止合并。也可使用 --deny-warnings 参数将警告也视为错误。对于需要忽略某些已评估且不适用于本项目的漏洞,可以通过在项目根目录创建 .cargo/audit.toml 文件来忽略特定 advisory。
.cargo/audit.toml 示例:
[advisories]
ignore = ["RUSTSEC-2020-0071"] # 已确认不影响本应用的漏洞
实用建议
- 定期执行
cargo audit,最好在每次新建 PR 时自动运行。 - 及时升级有漏洞的依赖,并测试兼容性。
- 关注
cargo-deny这个更全面的工具,它不仅可以审计安全漏洞,还能检查许可证合规、重复依赖等,适合严谨的项目。
2. 前端依赖漏洞扫描:npm audit 与 yarn audit
前端部分通常使用 Node.js 包管理器,npm 和 yarn 都内置了漏洞报告功能。它们依赖 GitHub Advisory Database 和 npm 自身的安全公告。
npm 项目
在包含 package-lock.json 的目录下执行:
npm audit
它会输出漏洞摘要:严重等级、包名、依赖路径、修复建议。
输出示例:
# npm audit report
lodash <4.17.21
Severity: high
Prototype Pollution - https://github.com/advisories/GHSA-x5xq-f8vh-x8h2
fix available via `npm audit fix`
node_modules/lodash
@vue/cli-service >=4.0.0
Depends on vulnerable versions of lodash
node_modules/@vue/cli-service
可以尝试自动修复兼容的版本:
npm audit fix
对于无法自动修复的漏洞,需要手动升级或寻找替代包。npm audit fix --force 会强制升级到有破坏性更改的最新版本(慎用)。
yarn 项目
Yarn 1.x 使用:
yarn audit
同样会列出漏洞。Yarn 没有内置的自动修复命令,需要手动根据提示升级。Yarn 2+ 可使用 yarn npm audit。
集成 CI
在 CI 脚本中加入 npm audit 或 yarn audit,并用 --audit-level=high 限制仅高危及严重漏洞导致失败:
npm audit --audit-level=high
如果项目存有已知低危且无法立即修复的漏洞,可以使用 .nsprc 或 audit-ci 工具进行“已知忽略”配置,避免 CI 卡死。
进阶:snyk 或 socket.dev
对于更全面的监控,可以使用 Snyk 扫描(npx snyk test)或 Socket 的 CLI 工具,它们能发现供应链攻击、恶意包等更深层的问题。这些工具通常提供更丰富的报告和修复建议,适合对安全性要求极高的大型项目。
3. 统一依赖检查命令(推荐)
可以在 Tauri 项目的 package.json 中定义一个脚本,让开发者一键检查所有依赖:
"scripts": {
"audit:rust": "cargo audit",
"audit:frontend": "npm audit --audit-level=high",
"audit": "npm run audit:rust && npm run audit:frontend"
}
这样,无论是在本地开发、提交前检查,还是在 CI 流水线中,只需要执行 npm run audit 就能确保两部分依赖的安全性。
一句话总结:依赖安全不是一次性的“大扫除”,而是通过 cargo audit 和 npm/yarn audit 这样的轻量工具,嵌入到日常工作流中,把已知漏洞拦截在代码合并之前。