Skip to content

收窄 Tauri opener 权限并设置最小 CSP #58

Description

@ghbvf

现状

全量 review 发现 Tauri renderer 权限和 CSP 过宽:

  • src-tauri/capabilities/default.json:6 授予 main window opener:default。
  • src-tauri/tauri.conf.json:20 到 src-tauri/tauri.conf.json:21 设置 csp: null。
  • 唯一 opener callsite 是 src/pr/PrRow.vue:16 到 src/pr/PrRow.vue:21,组件层只用 JS 正则允许 http(s) URL。

当前没有发现 v-html,所以这是权限最小化/纵深防御问题,不是已确认的 XSS 漏洞。但如果 renderer 被注入,攻击代码可以绕过组件校验直接调用 opener。

三维根因

  • 代码:URL 校验只在 UI 组件内,不在 Tauri permission 或后端边界。
  • 架构:capability 按默认权限开放,没有按实际 GitHub PR URL 用途收窄。
  • 历史:先接入 opener 能力,未补最小权限和 CSP。

影响

  • renderer compromise 后可打开任意 opener 默认允许的目标。
  • 缺少 CSP 会放大前端注入后的影响面。

修复方向

  • 最小方案:收窄 opener capability,仅允许需要的 URL scheme/host。
  • 彻底方案:改为后端 command 校验 https://github.com/<owner>/<repo>/pull/<number> 后再打开。
  • 重构方案:定义统一 external-link policy,所有外链入口走同一校验和测试。

Files

  • src-tauri/capabilities/default.json:6
  • src-tauri/tauri.conf.json:20
  • src/pr/PrRow.vue:16

Source

Discovered via full-project review with 6 subagents on 2026-06-17.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions