人人都会AI编程

22.3 远程页面加载安全:域名白名单、能力隔离

更新时间:2026-07-11

当你的 Tauri 应用需要加载一个完全托管在服务器上的前端页面(例如公司的内部系统、远程仪表盘),安全配置就变得至关重要。因为一旦允许加载远程内容,就意味着 WebView 可能会执行来自外部的任意 JavaScript——如果不加限制,攻击者一旦控制了服务器,就可能利用你的应用作为跳板访问本地文件、调用系统 API。

Tauri 提供了两个层次的防护,让你既能使用远程页面,又不会把应用的“钥匙”交出去:域名白名单能力隔离


域名白名单:只信我认可的来源

你可以在 tauri.conf.jsonsecurity 配置段中,显式声明允许加载的远程域名。

{
  "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 一贯的“默认拒绝”原则,对远程页面执行了更严格的能力阉割。

  1. 默认无法调用 Tauri API

enableTauriAPI 默认为 false,意味着远程页面的 JavaScript 无法直接执行 window.TAURI 的任何方法。你可以在下方显式地为该域名开启特定的 IPC 命令,而不是一股脑全部允许。

  1. 受 CSP 约束

Tauri 允许你为每个窗口设置独立的 Content Security Policy。对于远程窗口,你可以收紧脚本来源,防止 XSS 注入的资源窃取数据。

   "app": {
     "security": {
       "devCsp": "default-src 'self'; script-src 'self' https://trusted.cdn.com"
     }
   }
   
  1. 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 的权限系统为这个来源单独定制一张“能力授权清单”,这样你就能在享受远程部署便利性的同时,把安全风险控制在可接受的范围内。