bindbox-game/.trae/documents/安全审计结论与修复方案(称号_特效_优惠券_抽奖).md
邹方成 8141a47690
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
feat(称号系统): 新增称号管理功能与抽奖效果集成
- 新增系统称号模板与效果配置表及相关CRUD接口
- 实现用户称号分配与抽奖效果应用逻辑
- 优化抽奖接口支持用户ID参数以应用称号效果
- 新增称号管理前端页面与分配功能
- 修复Windows时区错误与JSON字段初始化问题
- 移除无用管理接口代码并更新文档说明
2025-11-16 11:37:40 +08:00

41 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 审计重点
- 配置与密钥:敏感信息明文存储在 `configs/*.toml`数据库密码、JWT密钥、COS密钥、微信AppSecret、commit_master_key
- 路由与鉴权:管理端多数接口已启用 `AdminTokenAuthVerify`;但存在非鉴权管理端接口(如 `seed_default``ensure_titles`)。
- 特效参数:`SystemTitleEffects.ParamsJSON` 后端仅做“非空”校验,运行期解析失败静默忽略;缺少数值范围与集合规模约束。
- 抽奖随机性主密钥未打印日志HMAC与拒绝采样实现合理但密钥来源为明文配置文件需迁移至环境变量。
- 优惠券/道具卡:分配/发放缺少配额与上限控制、幂等与审计;优惠券发放未限制超管。
## 具体风险与代码位置
- 明文密钥:`configs/fat_configs.toml:32``configs/*_configs.toml` 多处JWT/COS/MySQL/Wechat/commit_master_key
- 管理端非鉴权路由:`internal/router/router.go``/api/admin/system_titles/seed_default``/api/admin/menu/ensure_titles`)。
- 特效参数缺失校验:`internal/api/admin/titles_admin.go:173-213, 225-260`(仅非空);运行期解析:`internal/service/activity/draw_with_effects.go:104-149`(失败忽略)。
- 优惠券发放权限与配额:`internal/api/admin/users_admin.go::AddUserCoupon`(无超管校验、无模板配额扣减);道具卡分配虽限超管,但无上限/审计:`internal/api/admin/item_cards_admin.go::AssignUserItemCard`
## 修复方案(分阶段)
1) 配置与密钥治理
- 将敏感配置迁移到环境变量;`configs/*.toml`改为占位与示例;确保不在日志输出敏感值。
- 在密钥读取处加入检测:若为空或默认值,拒绝启动并记录安全告警。
2) 鉴权与权限
- 将所有管理端变更型接口统一置于鉴权组;保留非鉴权的仅限登录与必要的只读接口。
- 优惠券发放接口增加超管校验或细粒度权限;引入操作审计(记录操作者、时间、对象、数量)。
3) 特效参数强校验
- 后端在 `Create/ModifySystemTitleEffect``effect_type` 反序列化到明确 struct启用 `DisallowUnknownFields`
- 数值边界:`boost_x1000/chance_x1000/cap_x1000` 禁止负数,限制最大值;`target_prize_ids` 长度限制与去重;
- 运行期解析失败不再静默:记录结构化告警日志,并在管理端提示配置异常。
4) 优惠券/道具卡防滥用
- 模板配额与上限:发放时扣减可用数量,事务内完成;超量拒绝。
- 用户持有上限与重复发放策略:同模板在时间窗口内单用户限制;引入幂等键防重复请求。
- 操作审计与限流:关键接口限流、审批或二次确认;记录审计日志。
5) 抽奖安全稳健
- 保持现有 HMAC 与拒绝采样;确保 `commit_master_key` 仅从安全环境加载;周期性轮换与版本化控制。
## 交付内容
- 安全问题清单(带文件与行号)。
- 修复清单与实施顺序(先密钥与鉴权→后特效参数校验→最后配额/审计/限流)。
- 修复后的验证方案:单元测试、接口防护测试、管理端提示验证。
如确认,我将按上述方案逐项实施修复并提交相应代码与测试。