人人都会AI编程

指令配置、脚本限制、资源加载限制

更新时间:2026-07-11

指令配置(Command Allowlist)

前端无法随意调用 Rust 函数。你必须事先在 tauri.conf.json 中,通过 tauri > allowlist(Tauri v1)或 tauri > security > allowedCommands(Tauri v2)来声明哪些指令可以被前端触发。这个“白名单”机制确保了即便前端代码被注入恶意脚本,攻击者也无法执行未授权的系统操作。

典型配置示例(Tauri v2 风格):

{
  "tauri": {
    "security": {
      "allowedCommands": [
        "read_file",
        "write_file",
        "open_dialog"
      ]
    }
  }
}

在 Rust 侧,使用 #[tauri::command] 定义函数,其函数名自动成为指令名。如果某个命令未出现在允许列表中,前端调用时会直接收到错误,Rust 端根本不会执行。你还可以在命令实现中对参数做二次校验,但这一步已经是额外保险了。


脚本限制(Content Security Policy)

Tauri 允许(也强烈建议)你通过 Content Security Policy(CSP)来限制 WebView 中的脚本行为。你可以在 tauri.conf.jsontauri > security > csp 字段中设置 CSP 字符串,也可以自定义 HTML 中的 <meta> 标签。

最严格的策略是仅允许同一个源下的脚本,并禁止 eval、内联脚本和从外部 CDN 加载 JavaScript:

{
  "tauri": {
    "security": {
      "csp": "default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
    }
  }
}

这样设置后:

  • 任何 <script src="https://evil.com/x.js"> 都会被拦截。
  • 内联的 onclick="..."javascript: 伪协议被禁用(除非你明确添加 'unsafe-hashes' 或使用 'unsafe-inline')。
  • 你仍然可以通过 script-src 'self' 加载同源的前端打包产物。

即使你需要在 CSP 中放行一些合法资源(比如用于埋点的远程脚本),也请尽量缩小范围,例如 script-src 'self' https://trusted-analytics.com


资源加载限制(Asset & Resource Restrictions)

Tauri 使用自定义的协议(如 tauri://asset://)来加载前端资源,而不是通过 file:// 协议,这避免了 file:// 域下的跨源风险。但如果你不小心,前端代码可能通过 fetchXMLHttpRequest<img> 标签去请求本地文件或任意远程地址,从而泄露信息。

你需要结合 CSPTauri 的 allowlist 来收紧网络访问。

  1. 只允许加载本地资源

在 CSP 中设置 default-src 'self',并不为 imgmedia 等开启远程源。这样所有外部图片、视频请求都会被浏览器拦截。

  1. 配置 allowlist 中的网络访问

tauri.conf.jsontauri > allowlist > http(v1)或通过权限系统(v2)明确哪些域名可以被前端直接请求。Tauri 的网络拦截器会阻止任何不在许可列表中的 fetch/XHR 调用,即使是 JavaScript 发起的也同样被拦截。

    // Tauri v1 示例
    {
      "tauri": {
        "allowlist": {
          "http": {
            "scope": ["https://api.yourdomain.com/*"]
          }
        }
      }
    }
    
  1. 限制文件访问范围

当你通过 Rust 命令来读写文件时,可以约定只允许操作应用专属数据目录(app_data_dir),或者强制在前端传入的路径上做正则校验,杜绝路径遍历攻击。这并不是“资源加载限制”的直接配置,但同样是阻止前端越权访问本地资源的关键实践。


一句话总结:指令配置让前端只能调用你授权的 Rust 函数;脚本限制通过 CSP 挡住了未经许可的脚本执行;资源加载限制则严格管控了网络和本地文件的访问范围。这三者叠加,构成了 Tauri 应用前端沙箱的“铜墙铁壁”,即使 UI 层被攻破,也很难扩散到宿主系统。