vr-shopxo-plugin/plan.md

4.1 KiB
Raw Blame History

Council Plan — vr-shopxo-plugin 代码审议

Round 2 — 2026-04-15 状态:Finalize Phase


Task Summary

对 vr-shopxo-plugin ShopXO 票务插件进行全栈代码审议(评论性质,不改代码,变更提交本地 worktree


审议范围

  1. 插件架构EventListener.php / plugin.json
  2. 票务核心TicketService.php / BaseService.php
  3. 前端票务详情页ticket_detail.html
  4. 数据库 Schema001_vr_tables.sql
  5. 安全性审计(注入/XSS/重放/QR伪造

问题发现汇总(三方交叉验证)

编号 严重程度 类别 描述 来源
S-01 🔴 严重 业务逻辑 onOrderPaid 无幂等保护,同一订单可生成多张票 SE/BA/FE
S-02 🔴 严重 安全 购票参数前端计算无服务端验签,价格可被篡改 BA/FE
S-03 🔴 严重 安全 $goods.content|raw 存储型 XSS SE/BA/FE
S-04 🔴 严重 密钥管理 QR 加密密钥回退到硬编码默认值 SE/BA
M-01 🟡 中等 业务逻辑 verifyTicket TOCTOU 竞态条件 SE/BA
M-02 🟡 中等 鉴权 手动核销接口未验证核销员身份 SE/BA
M-03 🟡 中等 数据安全 观演人身份证明文存储 SE
M-04 🟡 中等 功能 loadSoldSeats 未实现,存在超卖风险 SE/BA/FE
M-05 🟡 中等 体验 CSS 缺少响应式设计,移动端体验差 FE
M-06 🟡 中等 前端 座位图渲染缺乏边界情况处理 FE
M-07 🟡 中等 安全 JSON输出使用 ` raw`
L-01 🟢 轻微 前端 data-label 属性可能含未转义数据 SE
L-02 🟢 轻微 加密 AES-CBC 无认证加密(无 HMAC SE/BA
L-03 🟢 轻微 体验 已选座位 UI 缺少状态管理 FE
L-04 🟢 轻微 安全 观演人表单无前端格式校验 FE
L-05 🟢 轻微 隐私 座位映射数据暴露在前端 JS FE
I-01 💡 建议 架构 Enable/Disable 钩子缺失 BA
I-02 💡 建议 架构 升级迁移逻辑为空 SE/BA
I-03 💡 建议 业务 退款钩子已注册但未实现 SE
I-04 💡 建议 体验 座位数量无硬上限 FE
I-05 💡 建议 扩展 座位图字符集仅支持 ASCII FE
I-06 💡 建议 性能 spec_base_id 缺少独立索引 FE
I-07 💡 建议 安全 座位图 JSON 无长度限制 FE
I-08 💡 建议 兼容性 ALTER TABLE 兼容性判断错误(empty($cols) 无效) BA

来源说明SE=SecurityEngineer / BA=BackendArchitect / FE=FrontendDev


立即修复优先级

P0 - 立即处理(上线前必须)

  1. S-01onOrderPaid 添加幂等检查
  2. S-02 — 购票参数改为服务端验价
  3. S-03 — 移除 |raw XSSsimple_desc + content
  4. S-04 — 移除 QR 密钥硬编码回退

P1 - 高优先级

  1. M-02 — 手动核销接口鉴权
  2. M-01verifyTicket 使用乐观锁原子更新
  3. M-04 — 实现 loadSoldSeats() 后端 API

P2 - 中优先级

  1. M-05 — 增加 CSS 媒体查询
  2. M-03 — 身份证字段加密存储
  3. I-03 — 实现退款后票状态更新
  4. I-08 — 修复 ALTER TABLE 兼容性判断

评审报告状态

报告 Owner 状态 主要发现
reviews/code-review-SecurityEngineer.md SecurityEngineer 已合并到 main 1严重+5中等+3轻微+4建议
reviews/code-review-BackendArchitect.md BackendArchitect 已合并到 main 5严重+4中等+4轻微+5建议
reviews/code-review-FrontendDev.md FrontendDev 已合并到 main 2严重+4中等+3轻微+4建议

Phase Breakdown

Phase 内容 状态
Draft 各维度代码阅读 + 问题识别 完成
Review 输出完整评审报告 完成3份报告已合并
Finalize 各 Agent 交叉评审 + 投票 进行中

[CONSENSUS: NO] — 3 份评审报告已就位,进入 Finalize 阶段,等待各 Agent 投票