人人都会AI编程

21.1 安全基线配置清单

更新时间:2026-07-11

构建 Tauri 应用时,安全不是“事后打补丁”,而是在配置阶段就能固化的基线。以下清单覆盖了从开发到分发的核心安全项,每一项都直接对应一个可能被利用的攻击面。你可以在项目初始化或发布前逐项核对。


1. 启用上下文隔离(Context Isolation)

  • 配置:在 tauri.conf.json 中,确保 tauri > security > csp 未设置过于宽松的策略,同时检查 tauri > allowlist 没有全局开启危险 API。
  • 作用:将前端 JavaScript 运行环境与 Tauri 的 IPC 通道完全隔离,防止恶意脚本直接调用后端命令。
  • 检查:确认 tauri.conf.json 中没有设置 "dangerousRemoteDomainIpcAccess": true(除非有绝对必要且了解风险)。

2. 最小化权限白名单(Allowlist)

  • 原则:默认所有系统接口都是禁用的,只开放应用真正需要的功能。
  • 具体项
  • fs:仅允许读取/写入指定目录,避免使用 scope: ["**"]
  • shell:如果不需要打开外部程序,完全关闭;若需要,使用精确的命令白名单。
  • http:限定能访问的域名及端口,禁止访问内网敏感地址。
  • clipboarddialognotification 等:按需开启,不给多余权限。
  • 为什么重要:即使前端被注入恶意代码,攻击者也无法调用未授权的系统能力。

3. 内容安全策略(CSP)

  • 配置位置tauri.conf.jsontauri > security > csp 字段。
  • 推荐基线
  default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'
  
  • 关键点
  • 禁止 script-src 'unsafe-eval'(除非前端框架强制需要)。
  • 限制 connect-src 为你的 API 域名和白名单 WebSocket 地址。
  • 避免使用 * 通配符或 data:blob: 源。
  • 效果:在浏览器层面阻止 XSS 攻击执行外部脚本或与恶意域名通信。

4. 禁用危险 API 与调试接口

  • 检查
  • 生产构建时,确保 devtools 功能禁用(tauri > allowlist > devtools 设为 false)。
  • 移除或禁用 tauri-plugin-* 中不需要的插件,尤其是 fsprocessshell 若未使用必须关闭。
  • 附加:确保 Rust 后端不暴露可以执行任意系统命令的自定义命令(如 std::process::Command 直接由前端传参调用)。

5. 外部链接与导航控制

  • 问题:WebView 中可能通过 window.opentarget="_blank" 打开外部链接,导致安全上下文泄露。
  • 处理
  • 使用 Tauri 的 on_navigation 回调拦截所有导航请求,仅允许应用内路由或受信任的域名。
  • 对于必须打开的外部链接,调用 shell.open(受 allowlist 控制)在系统默认浏览器中打开,而不是在 WebView 中加载。

6. 自定义协议的安全处理

  • 风险:如果在页面上注册了自定义协议(如 tauri://),可能被恶意页面利用。
  • 配置:确保自定义协议仅用于 IPC,不在前端代码中动态构造或从用户输入拼接待执行路径。
  • 底线:不要用自定义协议读取或执行本地任意文件。

7. 应用更新签名验证

  • 要求:对于生产环境分发,必须启用更新包的签名校验。
  • Tauri 内置的 updater 插件:要求所有更新包都有签名,且公钥硬编码在应用中,防止中间人攻击或替换更新。
  • 动作:检查 tauri.conf.jsonupdater.publicKey 已正确配置,endpoints 使用 HTTPS。

8. 资源与文件系统加固

  • 生产二进制:确保 Rust 编译时开启最高优化(opt-level = "s""z")的同时,不要开启 debug 断言或符号导出。
  • 敏感文件:请勿将 .env、私钥、证书等文件打包进最终安装包。使用环境变量或运行时注入。
  • WebView 存储:如果使用 localStorage 或 IndexedDB 存储敏感数据,记得在退出时清理,或采用加密存储(如通过 Rust 命令加密后写入文件)。

9. 最小化依赖与供应链安全

  • Rust 依赖:定期 cargo audit 检查已知漏洞,移除未使用的 crate。
  • 前端依赖:用 npm audit 或类似工具审查,避免引入有漏洞的 npm 包。
  • 构建环境:在 CI 中使用固定版本的依赖,启用锁定文件校验,防止供应链投毒。

10. 日志与错误处理

  • 原则:生产环境禁止在控制台或日志中输出堆栈信息、敏感路径或配置。
  • 做法:使用 Tauri 的日志插件,仅在发生恢复性错误时记录关键信息,并将日志文件放在受限权限目录。
  • 检查:前端代码中不应当有 console.log 打印 token 或用户数据(上线时通过 drop_console 等工具移除)。

清单使用方法:每次发版前,用这份列表做一次5分钟的“安全巡检”,可以拦截绝大多数由配置不当引发的漏洞。Tauri 设计的默认值已经非常安全,你只需确保自己没有“犯懒”全部打开即可。