🔒 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-src | JavaScript 来源 |
| style-src | CSS 来源 |
| 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
- 不要信任前端传来的所有数据