Tauri 的安全配置不是“一刀切”的全局开关,而是细粒度到单个 API、具体路径和允许的域名。这种设计让你可以精准控制应用的能力范围,避免因为过度授权而引入风险。
API 粒度控制
Tauri 将所有可能涉及系统资源或敏感操作的 API 拆分为独立的功能模块(如文件系统、网络、剪贴板、进程管理等)。在 tauri.conf.json 的 allowlist 段中,你可以对每一项 API 单独启用或关闭。例如:
- 只需要读取文件,不写入,可以只开启
fs.readFile,关闭fs.writeFile; - 不需要网络请求,就完全关闭
http模块,前端调用时会直接报错; - 不希望前端操作剪贴板,直接关闭
clipboard。
这种细粒度意味着:前端只能调用你明确授权的 API。即使 JavaScript 代码中存在恶意逻辑或 XSS 漏洞,攻击者也无法触及未启用的底层能力。
路径白名单
对于文件系统访问,允许的范围如果太广(比如允许访问整个用户目录),一旦前端被攻破,攻击者就可能读取或篡改任意文件。Tauri 提供了路径白名单机制——你可以在 allowlist 下为 fs 定义 scope,精确限制哪些目录或文件模式可以被访问。
例如,只允许应用读写一个特定的数据目录:
"fs": {
"scope": {
"allow": ["$APPDATA/my-app/data/**"],
"deny": ["$APPDATA/my-app/data/secrets.txt"]
}
}
这样前端只能操作 $APPDATA/my-app/data/ 下的文件,并且会明确排除敏感文件。路径白名单是文件和隐私安全的第一道防线。
域名白名单
如果应用需要通过网络加载外部资源或调用 API,你可以通过 allowlist 中的 http 和 shell 模块设置域名白名单。例如:
http.scope:控制哪些 URL 可以被fetch或XMLHttpRequest访问;shell.scope:控制哪些 URL 可以用系统浏览器打开。
不设置白名单时,默认禁止所有外部请求。这样可以防止前端脚本与应用后台之外的非授权服务器通信,有效抵御数据外泄。
一个完整的例子:只允许应用访问你自己的 API(https://api.myapp.com),并禁止任何其他域名:
"http": {
"scope": {
"allow": ["https://api.myapp.com/**"],
"deny": ["*"]
}
}
通过这三个维度的权限控制——API 功能开关、文件路径白名单、网络域名白名单——Tauri 实现了最小权限原则:前端只得到完成任务所需的最少能力,其余一切保持锁定。这种机制让你在享受 Web 开发效率的同时,不必为原生安全额外编写大量防护代码。