安全性:加固您的应用
安全性:强化你的应用
Section titled “安全性:强化你的应用”与标准网站不同,Tauri 应用程序可以访问用户的操作系统。能力越大,责任越大。Tauri 的安全性基于这样一个理念:前端绝不应被完全信任。
设计应用程序最安全的方法是假设 WebView 可能会被攻破(compromised)(例如,通过恶意第三方脚本)。隔离模式(Isolation Pattern) 会拦截(intercepts)从前端发送到后端的消息,并注入一个安全桥(secure bridge)。这可以防止任意 JavaScript 直接访问 Tauri API,除非明确允许(explicitly allowed)。
尽管手动实现很复杂,但 Tauri v2 使用访问控制列表(Access Control List, ACL)系统提供了强大的默认设置来隔离各项能力。
内容安全策略 (CSP)
Section titled “内容安全策略 (CSP)”CSP 是你抵御跨站脚本(Cross-Site Scripting, XSS)攻击的第一道防线。它限制了你的应用程序可以从哪些源加载脚本、样式和图片。在 Tauri 中,你应在 tauri.conf.json 的 security 部分进行配置。
{ "app": { "security": { "csp": "default-src 'self'; script-src 'self'; style-src 'self'" } }}此配置告诉 WebView:“只加载与应用程序一起打包的内容(‘self’)。不要执行外部脚本或加载远程样式。” 尽可能避免使用 'unsafe-inline' 或通配符(*)。
在 Rust 中验证输入
Section titled “在 Rust 中验证输入”绝不要假设来自前端的数据是安全的。如果你有一个命令会写入文件,并且前端发送了文件名,恶意行为者(malicious actor)可能会发送 ../../../../etc/passwd。
始终在 Rust 端清理和验证输入:
#[tauri::command]fn save_document(filename: String, content: String) -> Result<(), String> { // BAD: File::create(filename) // 糟糕的示例:File::create(filename)
// GOOD: Validate the filename contains no path traversals // 好的示例:验证文件名不包含路径遍历 if filename.contains("/") || filename.contains("\\") { return Err("Invalid filename".into()); } // Proceed with saving... // 继续保存... Ok(())}远程代码执行 (RCE) 风险
Section titled “远程代码执行 (RCE) 风险”最大的安全风险之一是允许你的应用程序导航到远程 URL(例如 https://google.com),同时注入了 Tauri API 钩子。如果该远程站点被攻破,攻击者将通过你的应用程序完全控制用户的操作系统。
黄金法则:只向你的本地内容(local content)暴露 Tauri API。如果你必须显示远程内容,请使用 <iframe> 或一个未启用 Tauri 功能的独立窗口(separate window)。
合规性与指南
Section titled “合规性与指南”Tauri 接受独立的安全性审计(security audits)。为了保持这种安全态势(security posture),你应该查阅官方的 Tauri 安全指南。这些指南涵盖了配置权限范围(permissions scopes)(限制哪些文件系统路径可访问)以及冻结 WebView 中的对象以防止原型污染(prototype pollution)。