跳到正文
灵动桌面框架
Esc
本栏目菜单

权限模型

灵动桌面框架基于 Tauri 2.x 的安全模型,默认最小权限原则。

安全架构

前端(WebView)→ IPC → 权限检查 → Rust Command → 系统资源

前端无法直接访问系统资源,所有操作都要经 IPC 交给 Rust 侧执行:

  • 核心 / 插件命令(窗口、托盘、opener、store、updater 等)—— 按 Capabilities 声明 逐条检查,未声明的权限直接被拒
  • 应用自己的 Command(get_config、set_config 等)—— 在 lib.rs 的 invoke_handler(tauri::generate_handler![...]) 中注册后即可被前端调用;框架的 build.rs 只调用 tauri_build::build(),没有为应用 Command 定义单独的权限清单,因此不受 capability 约束。只有注册进 generate_handler! 的函数才能被调用,参数校验在 Service 层完成(如 ConfigService::set 拒绝空键名)

安全规范

规范说明
禁止前端 fetch 外部 API通过 Rust Command 代理网络请求
禁止硬编码文件路径使用 Tauri Path API
禁止 SQL 字符串拼接使用参数化查询
禁止 unwrap()使用 Result + ? 运算符

CSP(内容安全策略)

框架模板默认未启用 CSP:

// src-tauri/tauri.conf.json
{
  "app": {
    "security": {
      "csp": null
    }
  }
}

null 表示不注入任何 CSP,开发期最省事;发布前建议按应用实际加载的资源收紧,例如:

{
  "app": {
    "security": {
      "csp": "default-src 'self'; img-src 'self' asset: https://asset.localhost; style-src 'self' 'unsafe-inline'"
    }
  }
}

WARNING

启用 CSP 后,前端加载的外部图片、字体、脚本以及 asset: 协议资源都要在对应指令里显式放行,否则会被拦截;改完需实测各页面是否有资源加载失败。