[优化-P2] 7个轻微问题与改进建议 #8
Loading…
Reference in New Issue
There is no content yet.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may exist for a short time before cleaning up, in most cases it CANNOT be undone. Continue?
🟢 L-01:AES-CBC 无认证加密
文件: service/BaseService.php:56-60
来源: Council 三方共识
AES-256-CBC 无 HMAC,密文被篡改后解密可能仍成功(padding oracle 理论风险)。建议升级为 AES-GCM。
🟢 L-02:seatInfo.classes 直接插入 HTML class
文件: view/goods/ticket_detail.html:271
来源: Council 架构评审
若 seat_map JSON 被 admin 篡改,可注入任意 CSS 类破坏页面(需要 admin 权限)。
🟢 L-03:字符集混用
文件: EventListener.php 建表语句
来源: Council 架构评审
插件表用 utf8mb4_general_ci,ShopXO 官方表用 utf8mb4_unicode_ci,JOIN 时排序可能不一致。
🟢 L-04:座位图字符集 ASCII 单字符限制
文件: view/goods/ticket_detail.html:261
来源: Council 前端评审
座位用单字符(A/B/C/_/-)标识,若需情侣座、多舞台等场景需要重构。
💡 I-01:upgrade() 空实现
文件: EventListener.php:136-139
来源: Council 三方共识
无版本迁移框架。未来表结构变更无法平滑升级。
💡 I-02:plugins_service_order_delete_success 声明但无处理
文件: plugin.json:24 / EventListener.php
来源: Council 三方共识
退款后票状态不更新,已退款用户仍可持票入场。
💡 I-03:spec_base_id 缺少独立索引
文件: EventListener.php 建表语句
来源: Council 三方共识
vr_tickets 表仅有 (goods_id) 联合索引,无单独的 spec_base_id 索引,影响按场次查询的性能。
西莉雅审核(2026-04-15)
plugins_service_order_delete_success未处理Issue #8 全部问题仍在,等 Phase 3 处理。
更新(2026-04-15 15:51):I-03 已由 Claude Code 修复并推送
commit
917104643—fix(migration): add missing indexes + fix ALTER TABLE PDOStatement bug修复内容:
idx_created_at+idx_spec_base_ididx_verified_atempty($cols)→$cols->rowCount() == 0西莉雅二次复查:✅ 通过。
核查结果
L-01 AES-CBC 无 HMAC - 理论风险(AES-CBC + 随机 IV 对一般应用足够安全)。可接受现状,未来可升级 AES-GCM。
L-02 seatInfo.classes HTML 注入 - 需要 admin 篡改 seat_map,风险极低。可接受现状。
L-03 字符集混用 (general_ci vs unicode_ci) - 已知不一致性,对排序有轻微影响。插件建表已使用 utf8mb4_general_ci,可接受现状。
L-04 单字符座位标识 - 已知限制,情侣座等场景需重构。可接受现状。
I-01 upgrade() 空实现 - 无版本迁移框架。未来表结构变更时补充。
I-02 退款后票状态不更新 - 重要业务逻辑缺口。如果支持退款,需实现
plugins_service_order_delete_success钩子将票标记为已退款(verify_status=2),否则退款订单的票仍可入场。建议列入 Phase 3。I-03 spec_base_id 索引 - ✅ 已修复(commit 917104643)。
结论:L-01~04/I-01/I-03 可接受现状或已修复,I-02(退款钩子)建议列入 Phase 3。