Files
ai-dimension/docs/代码评审报告-2026-09-19.md

2.4 KiB
Raw Permalink Blame History

维度(ai-dimension)代码评审与修复报告 · 2026-09-19

已修复(生产验证通过)

级别 问题 修复 验证
P0 /api/auth/webview-token 仅凭 openid 签发任意用户 token(排行榜公开 openid = 账号接管) 接口下线(客户端无调用) 返回"接口不存在" ✓
P0 POST /progress 可写 isSubscriber/isAdFree/subscribeExpiry/ownedSkins 白嫖付费权益 客户端写入全部剔除 写入后 DB 保持 false ✓
P1 aiModel 接口向管理员以外泄露 apiKey 明文 列表/详情/默认配置全部脱敏 密钥数=0 ✓
P1 登录 identifier/verifyCode 未强转(对象注入 $ne) 入口 String() 强转 代码审计 ✓
P1 sessionKey(支付签名凭据)随 /me、progress 全量下发 schema select:false,仅 vpay 中间件显式查询 代码审计 ✓
P2 搜索 $regex 未转义(ReDoS/注入) escapeRegExp 全量接入(knowledge+admin 9处) 正则字符搜索 200 ✓
P2 排行榜 limit 无上限且返回 openid limit 封顶100、去 openid 无 openid ✓
P2 share-gain 无限刷问答次数 每日限3次(shareRecords 统计) 第4次 429 ✓
P2 读接口每次写 AdminLog(日志膨胀) GET 路由移除 logAction(11处) 代码审计 ✓
P2 /:dim/questions 泄露检测题 isCorrect 选项脱敏(该接口当前无数据,防御性修复) 代码审计 ✓
P3 /shop-items 与 /shop 完全重复 删除 /shop-items 代码审计 ✓

已知残留(评估后接受/待定)

  • 旧 payment.js 体系(weixin.js 恒真验签、mock 退款、H5 mock 下单):属未启用的旧订阅支付链路,vpay(虚拟支付)才是现行通道;建议下个迭代整体删除旧 payment/weixin 文件避免误用。
  • 充值回调非原子幂等(check-then-act):已有 orderNo 流水查重兜底,重推双倍入账概率极低;建议加 {orderNo,type} 唯一索引彻底封死。
  • 退款先冻结后调微信非事务:进程崩溃窗口极小且有人工对账兜底(管理后台流水),接受。
  • 访问埋点全量写:目前 PV 低无压力;流量上来后改采样。

验证环境

  • 生产:wdkj.yuzhiran.com.cn(dim-server v1.6.21 healthy)
  • 关键链路回归:管理员登录/模型配置/知识搜索/排行榜/分享奖励 全部通过