当你的 Tauri 应用需要加载一个完全托管在服务器上的前端页面(例如公司的内部系统、远程仪表盘),安全配置就变得至关重要。因为一旦允许加载远程内容,就意味着 WebView 可能会执行来自外部的任意 JavaScript——如果不加限制,攻击者一旦控制了服务器,就可能利用你的应用作为跳板访问本地文件、调用系统 API。
Tauri 提供了两个层次的防护,让你既能使用远程页面,又不会把应用的“钥匙”交出去:域名白名单和能力隔离。
域名白名单:只信我认可的来源
你可以在 tauri.conf.json 的 security 配置段中,显式声明允许加载的远程域名。
{
"app": {
"security": {
"dangerousRemoteDomainIpcAccess": [
{
"domain": "app.internal.company.com",
"windows": ["main"],
"enableTauriAPI": false
}
]
}
}
}
配置说明:
domain:精确匹配的域名(不含协议和路径)。只有来自该域名的页面才被允许与 Tauri 后端通信。windows:指定哪些窗口可以加载此远程域名,未列出的窗口将被拦截。enableTauriAPI:强烈建议设为false,除非你真的需要让远程页面直接调用 Tauri 的原生能力(通常非常危险)。
实际使用建议:
- 尽量使用子域名或精确域名,避免使用通配符。即使需要子域名通配,也请使用
*.internal.example.com这种模式(Tauri 2 支持有限的通配符),并确保这些子域名都在你的完全控制之下。 - 生产环境中,永远不要允许
dangerousRemoteDomainIpcAccess使用enableTauriAPI: true且不加任何其他限制。如果远程页面必须使用某些原生能力,请显式列出允许的命令,而不是全开。
能力隔离:远程页面“干活”也不能越界
即使域名在白名单内,Tauri 也不会让远程页面为所欲为。它继承了 Tauri 一贯的“默认拒绝”原则,对远程页面执行了更严格的能力阉割。
- 默认无法调用 Tauri API
enableTauriAPI 默认为 false,意味着远程页面的 JavaScript 无法直接执行 window.TAURI 的任何方法。你可以在下方显式地为该域名开启特定的 IPC 命令,而不是一股脑全部允许。
- 受 CSP 约束
Tauri 允许你为每个窗口设置独立的 Content Security Policy。对于远程窗口,你可以收紧脚本来源,防止 XSS 注入的资源窃取数据。
"app": {
"security": {
"devCsp": "default-src 'self'; script-src 'self' https://trusted.cdn.com"
}
}
- IPC 权限范围可控
如果你确实需要远程页面触发某些原生操作(比如保存一个由服务器生成的报告),你应该:
- 在后端 Rust 命令中做额外的来源校验(检查调用命令的窗口 URL);
- 只暴露最小必要的命令,并使用自定义权限的标志(
#[tauri::command]配合权限系统); - 严格校验传入参数,避免路径遍历或任意文件写入。
典型场景示例
场景:公司内部有一个 Node.js 生成的监控仪表盘,部署在 monitor.internal.corp.com。你想把它封装成 Tauri 桌面应用,以便管理员使用系统托盘、接收桌面通知,但不允许该远程页面读写任何本地文件。
配置步骤如下:
// tauri.conf.json
{
"app": {
"windows": [
{
"label": "main",
"url": "https://monitor.internal.corp.com",
"width": 1200,
"height": 800
}
],
"security": {
"dangerousRemoteDomainIpcAccess": [
{
"domain": "monitor.internal.corp.com",
"windows": ["main"],
"enableTauriAPI": false
}
]
}
}
}
之后,如果你需要让仪表盘页面能触发一个系统通知(比如通过 Tauri 的 notification API),不要直接开启 enableTauriAPI,而是在 Rust 端专门创建一个命令 send_notification_from_remote,并在该命令中验证来源窗口的 URL 是 monitor.internal.corp.com,然后再执行通知。这样即使远程页面被 XSS 攻击,攻击者也无法执行文件读写等高危操作。
核心原则:远程内容是可变的,甚至可能被劫持,所以永远不要信任远程页面的输入。利用域名白名单限定来源,再用 Tauri 的权限系统为这个来源单独定制一张“能力授权清单”,这样你就能在享受远程部署便利性的同时,把安全风险控制在可接受的范围内。