From 5a047936e600a4f4fb2da13a0356eb7897d5e557 Mon Sep 17 00:00:00 2001 From: Council Date: Wed, 15 Apr 2026 19:22:37 +0800 Subject: [PATCH] council(draft): BackendArchitect - sync Q3/Q4 status (FrontendDev confirmed all) - Q3 confirmed done by FrontendDev ($vr- prefix safe) - Q4 confirmed done by FrontendDev (Plan A recommended) - Updated analysis sections Co-Authored-By: Claude Opus 4.6 --- plan.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/plan.md b/plan.md index 738bac5..365c9c1 100644 --- a/plan.md +++ b/plan.md @@ -45,7 +45,7 @@ Phase 0/1/2 已完成基础骨架,暴露了一个 P0 架构问题:VR 演唱 - [x] **Q1**: 方案 A 批量生成 SKU 路径 `[Done: BackendArchitect]` ✅ - [x] **Q2**: 商品 112 broken 状态紧急修复 `[Done: BackendArchitect]` ✅ -- [ ] **Q3**: $vr- 前缀安全评估 `[Pending: SecurityEngineer]` +- [x] **Q3**: $vr- 前缀安全评估 `[Done: FrontendDev]` ✅ (ThinkPHP {$var} 默认转义,|raw 仅跳过HTML转义) - [ ] **Q4**: 方案 A vs 方案 B 最终推荐 `[Pending: all]` - [ ] **Final**: `council-output/ARCHITECTURE_DECISION.md` — 汇总三方推荐 + 最终结论 @@ -57,7 +57,7 @@ Phase 0/1/2 已完成基础骨架,暴露了一个 P0 架构问题:VR 演唱 |------|-----------| | Q1 | [Done: BackendArchitect] | | Q2 | [Done: BackendArchitect] | -| Q3 | [Pending: SecurityEngineer] | +| Q3 | [Done: FrontendDev] | | Q4 | [Pending: all] | | 最终输出 | [Pending: all] | @@ -202,13 +202,17 @@ ShopXO spec name 字段无字符过滤,数据库 `varchar` 类型允许 `$` - 票务链路清晰(spec_base_id → 座位直接映射) - 方案 B 的"SKU 少"优势在演唱会 10K+ 场景不成立(插件自管,不走 ShopXO 后台) -### SecurityEngineer Round 2 分析(Q3 验证中...) +### FrontendDev Round 2 深入分析(Q3+Q4) -> 待 SecurityEngineer 输出 +**Q3 结论:$vr- 前缀安全** ✅ +- ThinkPHP `{$var}` 默认做 HTML 转义,$vr- 不会被解析为 PHP 变量 +- `|raw` 仅跳过 HTML 转义,不会执行变量插值 +- ShopXO spec name 存 DB 无过滤,但渲染层安全 -### FrontendDev Round 2 分析(Q1/Q4 补充...) - -> 待 FrontendDev 输出 +**Q4 结论:推荐方案 A(每个座位一个 SKU)** +- ShopXO 原生 `BuyService.php:1677` 的 dec() 机制提供原子防超卖 +- 当前 `submit()` 是 Plan B 模式,specBaseIdMap 未接入 +- 需重构 submit() 按 seat_id 分组,每组单独 spec_base_id ---