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

3.2 KiB
Raw Blame History

审计重点

  • 配置与密钥:敏感信息明文存储在 configs/*.toml数据库密码、JWT密钥、COS密钥、微信AppSecret、commit_master_key
  • 路由与鉴权:管理端多数接口已启用 AdminTokenAuthVerify;但存在非鉴权管理端接口(如 seed_defaultensure_titles)。
  • 特效参数:SystemTitleEffects.ParamsJSON 后端仅做“非空”校验,运行期解析失败静默忽略;缺少数值范围与集合规模约束。
  • 抽奖随机性主密钥未打印日志HMAC与拒绝采样实现合理但密钥来源为明文配置文件需迁移至环境变量。
  • 优惠券/道具卡:分配/发放缺少配额与上限控制、幂等与审计;优惠券发放未限制超管。

具体风险与代码位置

  • 明文密钥:configs/fat_configs.toml:32configs/*_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改为占位与示例;确保不在日志输出敏感值。
  • 在密钥读取处加入检测:若为空或默认值,拒绝启动并记录安全告警。
  1. 鉴权与权限
  • 将所有管理端变更型接口统一置于鉴权组;保留非鉴权的仅限登录与必要的只读接口。
  • 优惠券发放接口增加超管校验或细粒度权限;引入操作审计(记录操作者、时间、对象、数量)。
  1. 特效参数强校验
  • 后端在 Create/ModifySystemTitleEffecteffect_type 反序列化到明确 struct启用 DisallowUnknownFields
  • 数值边界:boost_x1000/chance_x1000/cap_x1000 禁止负数,限制最大值;target_prize_ids 长度限制与去重;
  • 运行期解析失败不再静默:记录结构化告警日志,并在管理端提示配置异常。
  1. 优惠券/道具卡防滥用
  • 模板配额与上限:发放时扣减可用数量,事务内完成;超量拒绝。
  • 用户持有上限与重复发放策略:同模板在时间窗口内单用户限制;引入幂等键防重复请求。
  • 操作审计与限流:关键接口限流、审批或二次确认;记录审计日志。
  1. 抽奖安全稳健
  • 保持现有 HMAC 与拒绝采样;确保 commit_master_key 仅从安全环境加载;周期性轮换与版本化控制。

交付内容

  • 安全问题清单(带文件与行号)。
  • 修复清单与实施顺序(先密钥与鉴权→后特效参数校验→最后配额/审计/限流)。
  • 修复后的验证方案:单元测试、接口防护测试、管理端提示验证。

如确认,我将按上述方案逐项实施修复并提交相应代码与测试。