🔒 Rust 内存安全

Tauri 使用 Rust 语言,天然避免常见内存安全问题:

  • 空指针:Rust 不允许空指针解引用
  • 缓冲区溢出:编译时边界检查
  • 内存泄漏:所有权系统自动释放
  • 数据竞争:借用检查器防止并发问题

🛡️ CSP 内容安全策略

配置内容安全策略限制资源加载:

json
// tauri.conf.json
{
  "app": {
    "security": {
      "csp": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'"
    }
  }
}

常用 CSP 指令

指令说明
default-src默认资源来源
script-srcJavaScript 来源
style-srcCSS 来源
img-src图片来源
connect-src网络请求来源

🔐 权限控制

Tauri 2.0 引入细粒度权限系统:

json
// capabilities/default.json
{
  "identifier": "default",
  "description": "Default capabilities",
  "windows": ["main"],
  "permissions": [
    "core:default",
    "shell:allow-open",
    "dialog:allow-open"
  ]
}

权限级别

  • allow:允许执行
  • deny:禁止执行
  • default:默认权限集

✍️ 代码签名

发布应用时进行代码签名:

macOS

  • Apple Developer 证书
  • 公证 (Notarization)
  • Hardened Runtime

Windows

  • 代码签名证书
  • SmartScreen 信誉
bash
# macOS 签名和公证
npm run tauri build -- --target universal-apple-darwin

# Windows 签名(需要 SignTool)
signtool sign /f cert.pfx /p password app.exe

📝 安全最佳实践

✅ 推荐做法

  • 最小权限原则,只开启需要的权限
  • 使用 HTTPS 加载外部资源
  • 验证所有用户输入
  • 定期更新依赖
  • 启用 CSP
  • 敏感数据加密存储

❌ 避免做法

  • 不要禁用 CSP
  • 不要在代码中硬编码密钥
  • 不要使用 eval() 和 innerHTML
  • 不要信任前端传来的所有数据