Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
- 新增系统称号模板与效果配置表及相关CRUD接口 - 实现用户称号分配与抽奖效果应用逻辑 - 优化抽奖接口支持用户ID参数以应用称号效果 - 新增称号管理前端页面与分配功能 - 修复Windows时区错误与JSON字段初始化问题 - 移除无用管理接口代码并更新文档说明
41 lines
3.2 KiB
Markdown
41 lines
3.2 KiB
Markdown
## 审计重点
|
||
- 配置与密钥:敏感信息明文存储在 `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` 仅从安全环境加载;周期性轮换与版本化控制。
|
||
|
||
## 交付内容
|
||
- 安全问题清单(带文件与行号)。
|
||
- 修复清单与实施顺序(先密钥与鉴权→后特效参数校验→最后配额/审计/限流)。
|
||
- 修复后的验证方案:单元测试、接口防护测试、管理端提示验证。
|
||
|
||
如确认,我将按上述方案逐项实施修复并提交相应代码与测试。 |