vr-shopxo-plugin/plan.md

58 lines
2.4 KiB
Markdown
Raw Normal View History

# Plan — vr-shopxo-plugin 安全评估 + 票务链路审计
> 版本v1.0 | 日期2026-05-26 | Agentcouncil/SecurityEngineer
---
## Round 1 安全评估任务清单
- [x] [Done: council/SecurityEngineer] **Task 1**: 审计购物车→支付→QR票生成链路BuyService → onOrderPaid → issueTicket
- [x] [Done: council/SecurityEngineer] **Task 2**: 检查 FOR UPDATE SKIP LOCKED 防超卖实现verifyTicket / issueTicket
- [x] [Done: council/SecurityEngineer] **Task 3**: QR签名机制审计HMAC-SHA256、30分钟exp、code字段
- [x] [Done: council/SecurityEngineer] **Task 4**: 检查 BaseService QR Secret 配置(硬编码风险)
- [x] [Done: council/SecurityEngineer] **Task 5**: 前端 XSS 风险初步评估
- [x] [Done: council/SecurityEngineer] **Task 6**: 输出安全评估报告 → `docs/council-eval-securityengineer.md`
---
## 阶段划分
| 阶段 | 内容 | 状态 |
|------|------|------|
| **Round 1 Draft** | 安全审计 + 评估报告 | ✅ 完成 |
| **Round 1 Review** | 投票 + 报告写入 main | 🔄 进行中 |
---
## 安全评估结论摘要
| # | 问题 | 严重性 | 状态 |
|---|------|--------|------|
| S-1 | issueTicket() 并发竞态(无悲观锁) | **P0 建议** | 建议加唯一索引 `(order_id, seat_info)` |
| S-2 | QR Secret 硬编码 fallback | **P1** | 需确认生产环境 `.env` 配置 |
| S-3 | FOR UPDATE SKIP LOCKED 概念混淆 | **P2** | 防超卖依赖ShopXO原子UPDATE已有效 |
| S-4 | onOrderPaid 无事务包装 | **P2** | 可接受(有幂等保护) |
| S-5 | 前端XSS观演人渲染 | **P3** | 需确认渲染方式 |
**无 P0 安全漏洞。支付链路整体安全,建议持续改进。**
---
## 投票
**议题:下一步主攻方向**
**投票C双线并行**
---
## 关键文件索引
| 文件 | 行号 | 安全关注点 |
|------|------|-----------|
| `shopxo/app/plugins/vr_ticket/service/TicketService.php` | 159-169 | issueTicket() 幂等检查(无悲观锁) |
| `shopxo/app/plugins/vr_ticket/service/TicketService.php` | 252-256 | verifyTicket() FOR UPDATE |
| `shopxo/app/plugins/vr_ticket/service/TicketService.php` | 25-138 | onOrderPaid 回调 |
| `shopxo/app/plugins/vr_ticket/service/BaseService.php` | 302-303 | QR Secret 硬编码 fallback |
| `shopxo/app/service/BuyService.php` | 1650-1684 | ShopXO 原子条件库存扣减 |
| `docs/council-eval-securityengineer.md` | — | 完整安全评估报告 |