人人都会AI编程

API 粒度控制、路径白名单、域名白名单

更新时间:2026-07-11

Tauri 的安全配置不是“一刀切”的全局开关,而是细粒度到单个 API、具体路径和允许的域名。这种设计让你可以精准控制应用的能力范围,避免因为过度授权而引入风险。


API 粒度控制

Tauri 将所有可能涉及系统资源或敏感操作的 API 拆分为独立的功能模块(如文件系统、网络、剪贴板、进程管理等)。在 tauri.conf.jsonallowlist 段中,你可以对每一项 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 中的 httpshell 模块设置域名白名单。例如:

  • http.scope:控制哪些 URL 可以被 fetchXMLHttpRequest 访问;
  • shell.scope:控制哪些 URL 可以用系统浏览器打开。

不设置白名单时,默认禁止所有外部请求。这样可以防止前端脚本与应用后台之外的非授权服务器通信,有效抵御数据外泄。

一个完整的例子:只允许应用访问你自己的 API(https://api.myapp.com),并禁止任何其他域名:

"http": {
  "scope": {
    "allow": ["https://api.myapp.com/**"],
    "deny": ["*"]
  }
}

通过这三个维度的权限控制——API 功能开关、文件路径白名单、网络域名白名单——Tauri 实现了最小权限原则:前端只得到完成任务所需的最少能力,其余一切保持锁定。这种机制让你在享受 Web 开发效率的同时,不必为原生安全额外编写大量防护代码。