现状
全量 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.
现状
全量 review 发现 Tauri renderer 权限和 CSP 过宽:
src-tauri/capabilities/default.json:6授予 main windowopener:default。src-tauri/tauri.conf.json:20到src-tauri/tauri.conf.json:21设置csp: null。src/pr/PrRow.vue:16到src/pr/PrRow.vue:21,组件层只用 JS 正则允许http(s)URL。当前没有发现
v-html,所以这是权限最小化/纵深防御问题,不是已确认的 XSS 漏洞。但如果 renderer 被注入,攻击代码可以绕过组件校验直接调用 opener。三维根因
影响
修复方向
https://github.com/<owner>/<repo>/pull/<number>后再打开。Files
src-tauri/capabilities/default.json:6src-tauri/tauri.conf.json:20src/pr/PrRow.vue:16Source
Discovered via full-project review with 6 subagents on 2026-06-17.