80 lines
7.0 KiB
Markdown
80 lines
7.0 KiB
Markdown
# 代码审计文档索引(2026-09-22)
|
||
|
||
本目录是 BSM Infra Full 后端 Go workspace 的**逐微服务代码审计报告**。审计基于静态源码阅读,覆盖 `module/` 下 18 个业务服务、`pkgs/all`、`pkgs/ecmall` 两个聚合入口,以及工作区与工程脚本。
|
||
|
||
> 审计方式:只读静态分析,不修改任何源码。结论均带 `文件:行号` 证据;无法确认处以【信息不足】标注。
|
||
> 修复建议仅针对实际缺陷给出最小、直接的动作,**不包含引入统一框架、抽象层、DTO/VO、DDD/CQRS 等过度设计/过度封装方案**。
|
||
|
||
## 交接给后续的文档分层
|
||
|
||
| 目录 | 内容 |
|
||
| --- | --- |
|
||
| `docs/`(本目录) | 按微服务名称的审计报告(本文档为索引) |
|
||
| `wiki/` | 产品级文档:总体审计报告、产品与服务目录、架构、运维、API |
|
||
|
||
## 基础与平台服务域(module/base)
|
||
|
||
| 审计报告 | 服务 | 主要职责 | 最严重问题(摘) |
|
||
| --- | --- | --- | --- |
|
||
| [passport.md](passport.md) | passport | 用户账号与身份认证 | 验证码登录/注册/找回**不校验验证码**;找回密码凭 identity 即可改密且写未加盐 MD5 |
|
||
| [mgt.md](mgt.md) | mgt | 后台组织与权限管理 | AppKey 登录**明文比对密码列**(pass-the-hash);dev 配置注入 `root/123456` |
|
||
| [initial.md](initial.md) | initial | 客户端初始化与基础字典 | `check/config_cache.go:21` **ORDER BY 字符串拼接(SQL 注入)**;版本判断非语义版本→强制降级 |
|
||
| [sender.md](sender.md) | sender | 短信与邮件发送 | 腾讯云短信**空实现** `return nil,nil`;日发送量/黑名单限制**从未生效**;验证码可重放 |
|
||
| [fts.md](fts.md) | fts | 文件传输与上传存储 | 上传路由前缀不一致;文件类型/大小校验次序问题 |
|
||
| [cloud.md](cloud.md) | cloud | 个人云空间与资料管理 | 空间唯一键导致**多用户不可用**;私人资料"加密"名不副实;根目录空指针 panic |
|
||
| [cms.md](cms.md) | cms | 站点内容管理 | 文章/评论**越权删改**;评论发布 panic;赞踩无去重可刷负;`Site` 全系列占位 |
|
||
| [ads.md](ads.md) | ads | 公共广告位内容分发 | README 宣称的缓存**完全未实现**(Redis 零引用);鉴权口径自相矛盾 |
|
||
| [feedback.md](feedback.md) | feedback | 意见反馈管理 | `Modify/Delete/Remark` 以入参 identity 为唯一条件→**越权改他人反馈**;接口全匿名 |
|
||
| [logs.md](logs.md) | logs | 业务操作日志 | 路由**无鉴权**;`fetch` 键名不一致与 `level` 断言**双 panic**;分页参数失效;IP 过滤写反 |
|
||
|
||
## 电商与交易服务域(module/ec)
|
||
|
||
| 审计报告 | 服务 | 主要职责 | 最严重问题(摘) |
|
||
| --- | --- | --- | --- |
|
||
| [address.md](address.md) | address | 收货地址簿 | `Get/Modify/Delete` **无归属约束→越权读改删他人地址**(可遍历 id 拿姓名/手机号/住址);Fetch 恒空 |
|
||
| [mall.md](mall.md) | mall | 店铺与商品经营 | 员工验证码登录**不校验验证码**;店铺**支付/邮件凭据任意登录用户可读改**;12 处写操作无店铺归属校验 |
|
||
| [market.md](market.md) | market | 代理与供应商管理 | 审核**无鉴权**、开号/删号鉴权被注释;登录令牌 AES 与鉴权 JWT 互斥 + 解析失败 panic;`Data` 确认为空实现 |
|
||
| [order.md](order.md) | order | 购物车与订单生命周期 | **模拟支付/发货生产可达**且硬编码支付参数;`OrderApprove` 无鉴权;优惠券**做加法**致应付变高;扣库存不检查 RowsAffected→超卖 |
|
||
|
||
## 资金与支付服务域(module/finance)
|
||
|
||
| 审计报告 | 服务 | 主要职责 | 最严重问题(摘) |
|
||
| --- | --- | --- | --- |
|
||
| [wallet.md](wallet.md) | wallet | 钱包与支付接入 | 支付回调**不验签**、客户端可自证支付成功;提现**只校验不扣减**且无幂等;余额扣减读后写→双花;支付宝分支必然 panic;微信密钥明文入库 |
|
||
|
||
## 社交服务域(module/social)
|
||
|
||
| 审计报告 | 服务 | 主要职责 | 最严重问题(摘) |
|
||
| --- | --- | --- | --- |
|
||
| [feed.md](feed.md) | feed | 社交动态与内容互动 | 动态**越权删改** + 私密动态泄露;分页 `Limit(page)` 错误;`DeleteComment` 空函数;HTTP gateway 不可用 |
|
||
| [group.md](group.md) | group | 群组与成员管理 | 入群审批**无角色校验**;`Modify` 重写群 identity 致成员脱钩;列名错误使核心接口恒失败 |
|
||
| [relation.md](relation.md) | relation | 好友、关注与匹配 | 通过申请**可单方面加任意陌生人为好友**;`TagFetch` 必然 panic;7 个接口引用不存在的 `relation_id` 列 |
|
||
|
||
## 聚合入口与工程
|
||
|
||
| 审计报告 | 对象 | 最严重问题(摘) |
|
||
| --- | --- | --- |
|
||
| [pkgs-all.md](pkgs-all.md) | pkgs/all(15 服务聚合) | grpc-gateway **404 与业务 NotFound 无法区分**→真实错误响应被覆盖;JWT 密钥默认值恰 32 字节可自签;无生产配置 |
|
||
| [pkgs-ecmall.md](pkgs-ecmall.md) | pkgs/ecmall(14 服务聚合) | 同源 404 分流缺陷与密钥问题;聚合不建表不播种→首次部署缺表缺管理员 |
|
||
| [workspace-and-scripts.md](workspace-and-scripts.md) | go.work 与 scripts | `api-docgen` 当前**无法构建**且版本长期漂移;SDK 指向仓库外相对路径不可移植;验证脚本 gofmt 门禁有缺口 |
|
||
|
||
## 统计
|
||
|
||
- 审计对象:**21 篇报告**(18 业务服务 + 2 聚合入口 + 1 工作区/脚本)
|
||
- 覆盖:`module/` 903 个 `.go`、66 个 `.proto`、58 个 `.yaml`;`pkgs/` 54 个 `.go`
|
||
- 跨服务汇总与修复优先级:[`wiki/audit-2026-09-22-总体审计报告.md`](../wiki/audit-2026-09-22-总体审计报告.md)
|
||
- 产品与服务目录:[`wiki/产品与服务目录.md`](../wiki/产品与服务目录.md)
|
||
|
||
## 整改进度(2026-09-22)
|
||
|
||
> 下文表格中的「最严重问题(摘)」描述的是**审计当时**的代码状态,其中标「高」的条目已在整改中处理;当前有效状态请看各篇报告末尾的「整改记录」章节。
|
||
|
||
各服务报告中标注为「**高**」的全部条目(**132 项**)已完成整改,逐条「处理结果」见每篇报告末尾的「**整改记录(2026-09-22)**」章节;跨服务汇总见总体审计报告的[第九节](../wiki/audit-2026-09-22-总体审计报告.md)。
|
||
|
||
整改约束:不做过度设计/封装(未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界);口令类摘要统一 bcrypt;注释全部中文;**未修改任何 `proto/*.proto` 与 `pb/*.go`**。
|
||
|
||
校验:21 个 module 全部通过 `GOWORK=off go build ./...`、`GOWORK=off go vet ./...`、`gofmt -l`(`pkgs/all`、`pkgs/ecmall`、`fts` 的既有单测同时通过;`sender` 的 `test/grpc/*_test.go` 带 `integration` 构建标签,需真实服务,不在默认测试范围)。
|
||
|
||
> 各报告中的「中」「低」级别项本轮未处理,可按各报告第 8 节「修复建议」继续推进。
|
||
> 库中历史的 MD5 / 明文口令记录无法被 bcrypt 校验,需通过「重置密码」流程迁移。
|