Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
- 新增系统称号模板与效果配置表及相关CRUD接口 - 实现用户称号分配与抽奖效果应用逻辑 - 优化抽奖接口支持用户ID参数以应用称号效果 - 新增称号管理前端页面与分配功能 - 修复Windows时区错误与JSON字段初始化问题 - 移除无用管理接口代码并更新文档说明
3.2 KiB
3.2 KiB
审计重点
- 配置与密钥:敏感信息明文存储在
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。
修复方案(分阶段)
- 配置与密钥治理
- 将敏感配置迁移到环境变量;
configs/*.toml改为占位与示例;确保不在日志输出敏感值。 - 在密钥读取处加入检测:若为空或默认值,拒绝启动并记录安全告警。
- 鉴权与权限
- 将所有管理端变更型接口统一置于鉴权组;保留非鉴权的仅限登录与必要的只读接口。
- 优惠券发放接口增加超管校验或细粒度权限;引入操作审计(记录操作者、时间、对象、数量)。
- 特效参数强校验
- 后端在
Create/ModifySystemTitleEffect按effect_type反序列化到明确 struct,启用DisallowUnknownFields; - 数值边界:
boost_x1000/chance_x1000/cap_x1000禁止负数,限制最大值;target_prize_ids长度限制与去重; - 运行期解析失败不再静默:记录结构化告警日志,并在管理端提示配置异常。
- 优惠券/道具卡防滥用
- 模板配额与上限:发放时扣减可用数量,事务内完成;超量拒绝。
- 用户持有上限与重复发放策略:同模板在时间窗口内单用户限制;引入幂等键防重复请求。
- 操作审计与限流:关键接口限流、审批或二次确认;记录审计日志。
- 抽奖安全稳健
- 保持现有 HMAC 与拒绝采样;确保
commit_master_key仅从安全环境加载;周期性轮换与版本化控制。
交付内容
- 安全问题清单(带文件与行号)。
- 修复清单与实施顺序(先密钥与鉴权→后特效参数校验→最后配额/审计/限流)。
- 修复后的验证方案:单元测试、接口防护测试、管理端提示验证。
如确认,我将按上述方案逐项实施修复并提交相应代码与测试。