fix version 1
This commit is contained in:
@@ -64,3 +64,16 @@
|
||||
- 覆盖:`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 校验,需通过「重置密码」流程迁移。
|
||||
|
||||
@@ -184,3 +184,20 @@ flowchart TD
|
||||
10. **清理与运维(A9/A10)**:`internal/server/new.go:26-30` 补上 `Mux: gwRuntime.NewServeMux()`(属生成模板,需与 `protoc-gen-slc` 一起改,否则独立进程的 HTTP 网关一直不可用);删除 `proto/const.proto` 与 `pb/const.pb.go` 中本模块用不到的 blocks 定义;修正三个 yaml 的 `Service: order` 与 `Anonymous: order.ping.hello`;替 `cmd/cli` 或直接删除;用一条集成测试覆盖"用户 A 不能读/改/删用户 B 的地址 + 列表非空"这两个最关键的回归点。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层或抽象封装。"统一鉴权框架""引入 DTO/VO""抽公共 base""改用 DDD/CQRS"一类改造不在此列;第 1、2、3 条用现有 `Where` 条件、一次 `Transaction` 与一个数据库唯一索引即可闭环。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| A1 | 高 | `Get`/`Modify`/`Delete` 无归属校验 | 已修复:三处按主键的读写一律附加 `passport_identity = auth.Identity` 条件,越权返回 `ErrPermissionDenied` |
|
||||
| A2 | 高 | `Fetch` 命名返回值 `reply` 从未赋值 | 已修复:结果集正确装配并返回,地址列表不再恒空 |
|
||||
| A3 | 高 | 默认地址唯一性无事务、无约束 | 已修复:取消旧默认与置新默认合并进 `impl.DBService.Transaction`,保证任一时刻至多一个默认地址 |
|
||||
| A4 | 高 | 非 JWT 的 `Authorization` 头触发 SDK `ParseJwt` 空指针、模块无 recover | 已修复:在 `internal/server/new.go` 增加最小 unary `recover` 拦截器,panic 转为 `codes.Internal`,进程不再崩溃 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
19
docs/ads.md
19
docs/ads.md
@@ -143,3 +143,22 @@ flowchart TD
|
||||
7. **补测试**:为 `ByPos` 增加 2~3 条最小用例——命中启用广告、同 `pos_key` 下含 `status != 1` 的记录(须被过滤)、`key` 为空。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层、抽象封装或 DTO/VO 改造。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| A1 | 中 | 鉴权策略两处矛盾(模块 yaml 匿名 vs 聚合未放行) | 未处理:本模块无「高」级问题,本轮未改动 `module/base/ads` 任何文件 |
|
||||
| A2 | 中 | 广告读取仅凭 `pos_key`,无租户/端隔离 | 未处理(保持现状) |
|
||||
| A3 | 中 | `Databases` 未校验,缺失即启动 panic | 未处理:本轮未改动本模块,其余服务已按同一模式补上非空校验,可后续对齐 |
|
||||
| A4 | 低 | README 宣称的缓存/性能/监控能力未实现 | 未处理(文档问题) |
|
||||
| A5 | 低 | `ByPos` 无返回条数上限 | 未处理 |
|
||||
| A6 | 低 | 死代码与死配置 + 无自动化测试 | 未处理 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
@@ -371,3 +371,27 @@ flowchart TD
|
||||
9. **补测试**:针对根目录 GetDir、多用户 Space.Get、大 page_size、目录环、附件 ID 返回等补最小正例/边界用例。
|
||||
|
||||
> 本报告只列与现有实现直接相关的修复项,不引入统一框架、抽象层、DTO/VO 或 DDD/CQRS 改造。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| C1 | 高 | 私人资料加密未落地(明文存储、密钥由客户端传入) | 已修复:新增 `internal/logic/private/crypto.go`,改用**服务端**密钥对内容做 AES-GCM 加解密后落库、读取时解密;客户端传入的 key 不再充当服务端密钥。密钥**只从环境变量 `BSM_CloudPrivateKey` 读取**,未配置或长度不足 16 字节时直接报错——**禁止回退到公开默认值**(回退等同于假加密)。历史明文记录按原值返回,避免旧数据不可读 |
|
||||
| C2 | 高 | 分享链路断裂 + `CreateShare` 不校验资源归属 | 已修复:建分享前校验目标资源属于 `auth.Identity`;读取路径打通,收件人可真正取到资源 |
|
||||
| C3 | 高 | 根目录 `ParentID` 空指针解引用导致 panic | 已修复:`GetDir`/`GetDirTree` 先判空再解引用 |
|
||||
| C4 | 高 | `key_identifier` 全局唯一 + 写入字面量 `"default"` | 已修复:取值改为按用户身份唯一,`uniqueIndex` 改回普通 `index`,多用户空间可用 |
|
||||
| C5 | 高 | 容量配额只统计不限制 | 已修复:新增 `internal/logic/disk/quota.go`,写入路径校验「已用 + 本次 ≤ 配额」,超限返回明确错误 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
### 部署前置(本次新增)
|
||||
|
||||
| 环境变量 | 用途 | 未配置后果 |
|
||||
| --- | --- | --- |
|
||||
| `BSM_CloudPrivateKey` | 私人资料内容 AES-GCM 加解密密钥(≥16 字节,建议 32 字节) | 私人资料写入/读取接口返回内部错误,不再以公开默认密钥「假加密」 |
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
19
docs/cms.md
19
docs/cms.md
@@ -215,3 +215,22 @@ flowchart TD
|
||||
10. **补单测(C15)**:为 `AddComment`(非 mall_staff 用户)、`Search`(大 page_size)、`DeleteComment`(父带子)、`IncrPostLike`(重复调用)各写一条边界用例,覆盖本次发现的高危问题。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入统一框架、DTO/VO 层、DDD/CQRS 等额外抽象。所有结论均附 `文件:行号` 证据;未发现证据处已标注【信息不足】或明确为推断。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| C1 | 高 | 文章/评论 增/删/改 不校验归属(越权) | 已修复:`post` 系列(文章与评论,模型含 `AuthorIdentity`/`OwnerIdentity`)按 `auth.Identity` 限定,非作者/非归属者返回 `ErrPermissionDenied`。**`pages` 系列(`CmsPages` 单页文章)当前模型只有 `types.Std_IICUDS` + 站点/内容字段,没有任何作者或归属列**,在现有表结构下无法判定归属——需要新增归属列才能实施,属**契约/表结构限制**,本轮未擅自改表 |
|
||||
| C2 | 高 | `AddComment` 未命中 `mall_staff` 时类型断言 panic | 已修复:改为带 `ok` 的安全类型断言并给默认值 |
|
||||
| C3 | 高 | `Search` 无 `page_size` 上限 | 已修复:归一化分页(`page` 下限 1、`page_size` 上限 100) |
|
||||
| C4 | 高 | 删除父评论导致 `comment_hits` 计数不一致 | 已修复:删除时同步修正计数 |
|
||||
| C5 | 高 | `Site` 全系列占位空实现却返回成功 | 已修复:改为显式返回 `codes.Unimplemented`,不再假成功 |
|
||||
| C6 | 高 | 赞/踩无去重且可刷成负数 | 已修复:计数改为条件更新并加下限保护,不再出现负值。**完整去重需要「谁点过」的记录表/字段,属契约外,未做** |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
25
docs/feed.md
25
docs/feed.md
@@ -290,3 +290,28 @@ flowchart TD
|
||||
10. **测试**:为 `PostList`(分页与可见性过滤)、`LikeAction`(点赞/点踩各一次)、`DeleteComment`、`AddComment`(作者落库与计数一致)各写一条正例 + 一条边界用例。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项。为 feed 引入"统一内容框架""时间线抽象层""互动事件总线""DTO/VO 分层"一类改造不在建议范围内——上述 10 条都是对现有函数与配置的最小修正。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| F1 | 高 | 删除动态无归属校验 | 已修复:删除条件加 `passport_id`/`passport_identity = auth.Identity` |
|
||||
| F2 | 高 | 修改动态无归属校验 | 已修复:同上,越权返回 `ErrPermissionDenied` |
|
||||
| F3 | 高 | 列表无 `is_open`/`status` 过滤,私密动态泄露 | 已修复:列表查询过滤公开状态,他人不可见私密动态 |
|
||||
| F4 | 高 | 互动计数无去重、无身份绑定,可无限刷量 | 已修复:改为条件更新并加计数保护。**完整去重需要新增记录表/字段,属契约外,未做** |
|
||||
| F5 | 高 | 分页 `Limit(page)` 且未回写,分页失效并全表返回 | 已修复:改为 `Limit(page_size).Offset((page-1)*page_size)`,并归一化 `page`/`page_size` |
|
||||
| F6 | 高 | `DeleteComment` 空实现,删除接口永远成功 | 已修复:实现真实删除并校验评论归属 |
|
||||
| F7 | 高 | 列表恒不返回标签与附件 | 已修复:补 `Preload` 装配 tags/attachs |
|
||||
| F8 | 高 | 点踩计数条件写错导致 SQL 列名为空 | 已修复:修正列名/字段名 |
|
||||
| F9 | 高 | 修改动态无法改为不公开、附件变更被静默丢弃 | 已修复:允许 `is_open` 置 false(不被零值过滤吞掉),附件变更真正落库 |
|
||||
| F10 | 高 | `feed_*.yaml` 字段名不匹配导致启动即退出、`Databases` 缺失即 panic | 已修复:按 SDK 规范重写 `etc/*.yaml`(顶层 `Service`/`Port`/`Databases(Driver/Source)`/`Cache`)并补 `Etcd` 段 |
|
||||
| F11 | 高 | gateway handler 从未注册、`Mux` 为 nil、无 `service.Expose` | 已修复:照 `module/social/group`/`relation` 的既有接线方式初始化 `gwRuntime.NewServeMux()`、注册 gateway handler 并补 `service/expose.go`、`service/dependencies.go` |
|
||||
| F12 | 高 | `feed_tags` 无 `identity` 列却被 `Where("identity")` 使用 | 已修复:按模型实际列名修正 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
@@ -177,3 +177,21 @@ flowchart TD
|
||||
13. **清理与补测**:删 `impl.go` 中未使用的 Redis/Etcd/Memory 初始化、`proto/feedback.proto:119-122` 的 `IdentRequest`、`test/rpc/rpc.go`;修正 `test/add.http` 的非法 JSON;为 `Get`/`Modify`/`Delete`/`Remark` 各写 1 条越权用例与 1 条正常用例。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层、抽象封装或 DTO/VO 改造。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| F1 | 高 | `Get`/`Delete`/`Remark` 不解析身份、四接口均无归属校验(IDOR) | 已修复:全部补 `service.ParseMetaCtx` 并按 `passport_id`/`passport_identity` 限定读写,越权返回 `ErrPermissionDenied` |
|
||||
| F2 | 高 | `Get`/`List` 直接返回 `email`/`phone`(PII) | 已修复:非本人/非管理端访问时对 PII 字段做掩码,本人可全量 |
|
||||
| F3 | 高 | `Modify` 把主表 `identity` 改写为随机 UUID | 已修复:改用 `Updates` 正常更新,不再改写 `identity` |
|
||||
| F4 | 高 | `Modify` 附件未赋 `identity` 导致子表唯一键冲突 | 已修复:为每个附件生成 `identity` |
|
||||
| F5 | 高 | 关联被写两遍且无事务,修改报错且数据半更新 | 已修复:合并为一次写入,并用 `impl.DBService.Transaction` 保证主表与附件同成功/同失败 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
16
docs/fts.md
16
docs/fts.md
@@ -175,3 +175,19 @@ flowchart TD
|
||||
10. **补测试**:为"`bucket=../../etc` 穿越被拒"、"JWT 无 identity 时上传被拒"、"超过 `MaxSize` 的请求体被拒"、"DB 失败不留下孤儿文件"各写一条用例;并在 CI 中真正执行 `go test ./...`(当前 `register_test.go` 是红的)。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层、抽象封装或 DTO/VO 改造。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| W1 | 高 | `bucket` 未校验导致本地存储路径穿越 | 已修复:对 `bucket`/文件名做净化与白名单校验(拒绝 `..`、绝对路径、路径分隔符),并用 `filepath.Clean` + 根目录前缀校验兜底;新增 `internal/logic/guard_test.go` 覆盖路径穿越用例 |
|
||||
| W2 | 高 | 路由前缀 `/rest/fts` 与单测期望 `/rest/fts/v1` 矛盾,测试必失败 | 已修复:统一为同一前缀,`GOWORK=off go test ./...` 通过 |
|
||||
| W3 | 高 | 先落盘后落库、失败不清理 | 已修复:落库失败时删除已写入的本地/对象存储文件 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
@@ -242,3 +242,27 @@ flowchart TD
|
||||
10. **清理与测试**(G17):删除 `basic/const.go` 未使用的 `filed`、`impl.go` 中未使用的 Redis/Memory 初始化、`models/query.go:9-12` 的空 `InitData`(或从 `cmd/main/main.go:38` 移除注册);为 `DoJoin`/`JoinDoHandle`/`DoQuit`/`Modify` 各补一条正例 + 一条边界用例(当前 0 测试)。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层或抽象封装。为 group 引入"统一权限框架""群组领域层/事件总线""DTO/VO 分层"一类改造不在建议范围内——上述 10 条都是对现有函数、SQL 与配置的最小修正。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| G1 | 高 | 入群审批无角色校验 | 已修复:审批前校验调用者为该群群主/管理员,否则 `ErrPermissionDenied` |
|
||||
| G2 | 高 | `Disband` 为 TODO 占位却返回成功 | 已修复:实现真实解散——校验群组存在且调用者为群主(`group.PassportID != auth.ID` 即 `ErrPermissionDenied`),并在事务内软删除群组与其成员记录,不再假成功 |
|
||||
| G3 | 高 | `Basic.Get`/`Basic.Fetch` 丢弃查询结果 | 已修复:修正返回值装配,接口真实返回群数据 |
|
||||
| G4 | 高 | `Modify` 重写群 `identity` + `UpdateColumns` 零值覆盖 | 已修复:不再改写 `identity`;零值字段不再覆盖已有值 |
|
||||
| G5 | 高 | `creator_id` 列不存在导致 Modify/DoQuit/DoSetManager 恒失败 | 已修复:按模型真实列名修正(含 `createor_id` 拼写错误) |
|
||||
| G6 | 高 | `GetGroupEnableAnyJoin` 列名错+语义错+吞错误 | 已修复:修正列名与免验证入群语义,并检查 `.Error` |
|
||||
| G7 | 高 | `JoinDoHandle` 无幂等、错误被吞、未知 direction 返回成功 | 已修复:加幂等判断、检查全部 `.Error`、未知 direction 返回 `ErrInvalidArgument` |
|
||||
| G8 | 高 | 入群无幂等与成员上限校验 | 已修复:加重复入群防护与成员上限校验 |
|
||||
| G9 | 高 | 裸 SQL 表名(`group`/`group_member`)与模型不一致 | 已修复:表名与模型 `TableName()` 对齐,两个列表接口可用 |
|
||||
| G10 | 高 | `join_fetch` IN 缺占位符 + dest 结构不匹配 + `From` 指针复用 | 已修复:修正占位符数量、目标结构映射与指针复用 |
|
||||
| G11 | 高 | `DoKick` 权限条件列名/类型双错 | 已修复:修正列名与类型,并补「仅群主/管理员可踢人」的角色校验 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
@@ -220,3 +220,20 @@ flowchart TD
|
||||
10. **清理与补测**:删除 `internal/excode`(或真正在参数校验处使用其中错误码)、`internal/models/query.go`、`proto/const.proto` 中与本模块无关的消息、`cmd/cli` 占位;变量名 `MemorySerice` → `MemoryService`;至少为 `Updates`(同版本/高版本/低版本/无记录)与 `Config`(专有 OS 覆盖 ALL、同 OS 多条取最新)各补 2~3 条表驱动用例。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层、抽象封装或 DTO/VO 改造。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| I1 | 高 | `config_cache.go` 把 `os` 参数字符串拼进 `ORDER BY`(SQL 注入) | 已修复:改为排序白名单校验,绝不拼接用户输入 |
|
||||
| I2 | 高 | `updates.go` 用字符串不等判断版本 | 已修复:改为按 `.` 分段转数字的语义版本比较,客户端不再被误判降级 |
|
||||
| I3 | 高 | `areas_cache.go` 查询模型上不存在的 3 列且 DB 错误被 `Set` 覆盖 | 已修复:按模型真实列名修正;错误必检查,失败不写缓存 |
|
||||
| I4 | 高 | 6 个接口全部匿名,独立部署网关无鉴权中间件 | 已修复:收敛匿名白名单,仅保留确需公开的接口 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
18
docs/logs.md
18
docs/logs.md
@@ -133,3 +133,21 @@ flowchart TD
|
||||
7. **补测试**:为 `create`/`fetch`/`total` 各写一条正例 + 一条边界用例,覆盖本次发现的三处 panic。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层或抽象封装。日志审计中"统一请求校验框架""引入 DTO 层"一类改造不在此列。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| L1 | 高 | 路由无鉴权,日志可伪造/泄露 | 已修复:业务接口移出匿名组,仅保留探测接口公开;yaml 匿名口径与代码一致 |
|
||||
| L2 | 高 | `fetch` 取参键名不一致导致 panic | 已修复:修正键名,并统一改为安全类型断言 |
|
||||
| L3 | 高 | `level` 类型断言导致 panic | 已修复:改安全断言并给默认值 |
|
||||
| L4 | 高 | 分页参数完全失效 | 已修复:修正归一化与 `Limit`/`Offset`,并加 `page_size` 上限 |
|
||||
| L5 | 高 | `create` 的 IP 过滤逻辑写反 | 已修复:修正判断方向,过滤真正生效 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
25
docs/mall.md
25
docs/mall.md
@@ -360,3 +360,28 @@ flowchart TD
|
||||
14. **清理与测试**:删除 `set_profile.go:31` 的 `.Debug()`、`get_setting.go` 等 4 处 `print(err.Error())` 与 6 处 TODO 残留;为 `login`(含验证码分支)、`item_fetch`、`spec_create`、`item_create` 各补 1 条正例 + 1 条边界用例;README 的驱动与端口按 `etc/*.yaml` 更新。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层或抽象封装。仓储里"为 models 层加统一查询构造器""引入 DTO/VO 转换层""把跨库表访问抽象为 RPC 客户端"一类改造不在此列。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| M1 | 高 | 员工手机验证码登录不校验验证码 | 已修复:按 `/SMS/Code/` + 手机号的既有 Redis 键规则真实校验,成功后删除键 |
|
||||
| M2 | 高 | 支付/邮件配置可被任意已登录用户读改(4 接口 + 无鉴权的 `GetSetting`) | 已修复:统一增加「当前登录者属于该店铺」的归属校验,越权返回 `ErrPermissionDenied`;`SetSetting` 亦从「凭请求 `identity` 直接 `Updates`」改为以 token 中的店铺归属为准,并检查 `RowsAffected`,避免改到他人店铺却静默成功 |
|
||||
| M3 | 高 | 12 处写操作无店铺归属校验(商品/规格/图片/分类/广告/公告/运费/员工) | 已修复:逐处补归属条件(条件中直接带归属字段,`RowsAffected == 0` 即视为越权或不存在) |
|
||||
| M4 | 高 | `Staff.Fetch` 鉴权被注释,员工手机号/邮箱批量泄露 | 已修复:恢复鉴权 |
|
||||
| M5 | 高 | 进货价/代理价经 `ItemDetail`、`SpecDetail`、`SpecFetch` 外泄 | 已修复:匿名或非本店调用者不下发成本类价格字段,本店可正常查看 |
|
||||
| M6 | 高 | `Licensing` 不校验许可码,店铺标识可被枚举 | 已修复(安全降级):要求已登录并校验归属。**完整许可校验缺少数据源,未做** |
|
||||
| M7 | 高 | `item_fetch` 分类过滤恒空、价格区间单边失效、重复查询 | 已修复:修正过滤条件与重复查询 |
|
||||
| M8 | 高 | `store/search.go` 列名错误导致店铺搜索完全不可用 | 已修复:按模型真实列名修正 |
|
||||
| M9 | 高 | `spec_create.go` 库存被写为 `stock_type` | 已修复:库存写入正确字段 |
|
||||
| M10 | 高 | `spec_create.go`/`photo_create.go` nil error 调 `Error()` 导致 panic | 已修复:先判 err 非空再记录 |
|
||||
| M11 | 高 | `item_detail_by_serial.go` Preload 关联名不存在 | 已修复:按模型真实关联名修正 |
|
||||
| M12 | 高 | 12 个接口空实现/假成功(运费 9 个 + 入驻 + 小程序码 + 按规格查询) | 已修复:全部改为显式返回 `errcode.ErrUnimplemented`,不再假成功;方法签名与 proto 保持不变。**其中 `freight.DenyRegionRemove` 在首轮整改中被遗漏,本轮已补齐**(共 9 个运费接口) |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
@@ -231,3 +231,23 @@ flowchart TD
|
||||
10. **收尾清理(M15/M16/M17)**:`internal/server/new.go:26-30` 补 `Mux: gwRuntime.NewServeMux()`(需改生成模板 `protoc-gen-slc`,否则独立进程的 HTTP 网关一直不可用);`supply/create.go:34` 恢复 `Avatar` 赋值,并为 `Supply` 补登录 RPC 或明确删除其 `account`/`password` 字段;确认线上两张表 `password` 列无历史 MD5 存量(若有,需一次性迁移脚本 + 首次登录强制改密),之后删除两处 `salt` 列与 `set_password.go:47` 的 `"salt": ""` 写入;补一条集成测试覆盖"匿名/低权令牌不能 Approve、不能 Delete、不能读他人 Get/Single、列表 count 等于总数"。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层或抽象封装。"统一鉴权框架""引入 DTO/VO""抽公共 base""改成 DDD/CQRS"一类改造不在此列;第 1、2、4、5 条都是恢复已有写法或改一行条件/一处归一顺序即可闭环。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| M1 | 高 | `Approve` 无鉴权;`Agency.Create`/`Agency.Delete`/`Supply.Create` 鉴权被整段注释 | 已修复:恢复鉴权并补角色/归属校验,审核、开号、删号限定为有权限的角色 |
|
||||
| M2 | 高 | `Get`/`Modify`/`SetPassword` 用请求 `identity` 覆盖 token `identity` | 已修复:一律以 `auth.Identity` 为准;请求参数与 token 不一致即返回 `ErrPermissionDenied` |
|
||||
| M3 | 高 | `Data` 服务 5 个方法全为零实现却已注册对外 | 已修复:改为显式返回 `codes.Unimplemented`,不再返回成功 |
|
||||
| M4 | 高 | 登录签发 AES 密文 vs 接口校验 HS256 JWT,互不兼容 | 已修复:登录签发改用 SDK 同一套 token 签发函数,与接口侧校验格式统一,登录链路打通 |
|
||||
| M5 | 高 | 非 JWT 的 `Authorization` 头触发 SDK `ParseJwt` 空指针、模块无 recover | 已修复:在 `internal/server/new.go` 增加最小 unary `recover` 拦截器 |
|
||||
| M6 | 高 | 分页 `Offset` 早于参数归一化、`Pending` 用 `< 0` 归一导致 `LIMIT 0` | 已修复:先归一化分页(下限 1)再计算 `Offset` |
|
||||
| M7 | 高 | `Count` 被丢弃、`Total` 直接返回本页条数 | 已修复:改用独立 `Count` 查询得到总数 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
15
docs/mgt.md
15
docs/mgt.md
@@ -154,3 +154,18 @@ flowchart TD
|
||||
8. **确认 JWT 签名校验**:核实 bsm-sdk `ParseAuth` 是否校验签名;如未校验,管理员鉴定即形同虚设——此为前提性修复。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层或抽象封装。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| M1 | 高 | `AppKey` 登录明文比对密码列(哈希即凭证) | 已修复:`checkAppKeyAndStatus` 改为 `bcrypt.CompareHashAndPassword` 比对,与模块内其它位置的 bcrypt 存储保持一致;同时**移除 `checkPwdAndStatus` 中残留的 MD5 向后兼容分支**(`crypto/md5`、`encoding/hex` 导入一并删除),全模块口令校验统一为 bcrypt |
|
||||
| M2 | 高 | dev 默认 `root/123456` 弱管理员账号 | 已修复:移除硬编码弱口令,初始密码改从环境变量读取;未设置时不再创建可用默认口令管理员,yaml 中不再出现 `123456` |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
@@ -299,3 +299,27 @@ flowchart TD
|
||||
14. **清理与测试**:删除 `internal/models/order_summary.go:70-151`、`internal/models/query.go:22` 三个坏 SQL 函数(或按模型重写后接线);删掉 `order_cancel.go:29-36` 的重复校验与 `etc/*.yaml:19` 的 `order.ping.hello`;为 `Submit`(多店铺、空车、库存不足、优惠券)、`Confirm`、`Cancel`、`Cart` 各补 1 条正例 + 1 条边界用例(现有 `test/rpc/*.go` 只打印返回,无断言);补写 `README.md`。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层或抽象封装。仓储里"把商品查询改成 RPC 调用""引入订单状态机框架""引入领域事件保证最终一致""增加 DTO/VO 层"一类改造不在此列;上述第 10 条针对的是运行期约束缺失这一实际问题,最小动作是集中查询位置并注明依赖,不是新建抽象层。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| O1 | 高 | 模拟支付/发货/收货在生产可达、无角色校验、金额硬编码 | 已修复:补 `service.ParseMetaCtx` 鉴权,并加运行模式开关(仅 dev 可执行,非 dev 直接拒绝),硬编码支付参数改为从配置读取 |
|
||||
| O2 | 高 | `OrderApprove` 完全无鉴权 | 已修复:补鉴权,并校验审批值与订单当前状态,非法状态跃迁被拒绝 |
|
||||
| O3 | 高 | 跨服务直连同库(`mall_product`/`mall_product_spec`/`mall_store`/`address_library`) | 部分处理:**架构现状保留**(未做服务化改造);本次只补齐必要过滤条件、检查全部 `.Error`、对非本用户数据的写入补归属校验 |
|
||||
| O4 | 高 | 优惠券把金额加到订单总额 | 已修复:改为减法,并补归属/有效期/使用门槛校验(仅使用模型实际存在的字段) |
|
||||
| O5 | 高 | 扣库存不检查 `RowsAffected`(超卖) | 已修复:改为原子条件更新 `stock = stock - ? WHERE id = ? AND stock >= ?`,`RowsAffected == 0` 即回滚事务并返回库存不足 |
|
||||
| O6 | 高 | 多店铺下单 `store_id` 恒为 0 | 已修复:`store_id` 改从商品/店铺明细的实际归属取,订单归属正确 |
|
||||
| O7 | 高 | `Submit` 忽略选中条目、清空全车 | 已修复:只处理请求中选中的购物车条目,未结算条目保留 |
|
||||
| O8 | 高 | 快速下单/管理端建单单价取自从不写入的 `sales_price`,成交金额恒为 0 | 已修复:改用模型实际存在的价格列,成交金额不再为 0 |
|
||||
| O9 | 高 | 取消订单不返库存 + 状态机无约束 + 取消失败静默成功 | 已修复:取消时在事务内回补库存;校验当前状态是否允许取消;检查所有 `.Error`,不再静默成功 |
|
||||
| O10 | 高 | 订单详情越权、地址越权使用(4 处)、购物车读/写/删越权 | 已修复:全部补 `auth.Identity` 归属校验,越权返回 `ErrPermissionDenied` |
|
||||
| O11 | 高 | 购物车返回成本价 | 已修复:响应不下发成本价;同文件吞掉查询错误的 `if err == nil` 一并修掉 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
@@ -169,3 +169,31 @@ flowchart TD
|
||||
8. **清理**:移除 `cmd/cli` 调试输出、空 `excode/ex.go`、未调用的限流函数(或真正接入);敏感信息勿进 `printer`。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层或抽象封装。
|
||||
|
||||
## 9. 整改记录
|
||||
|
||||
### 2026-09-22:密码哈希统一为 bcrypt(对应建议 2、3)
|
||||
|
||||
| 位置 | 改动 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `internal/logic/forget/reset.go:32-43` | `utils.Md5(in.Password)` → `bcrypt.GenerateFromPassword(密码+新salt, bcrypt.DefaultCost)`,并在同一条 `Updates` 中同步写入新的 `salt` | 修复 P4:重置密码与登录校验(`bcrypt.CompareHashAndPassword(密码+sa.Salt)`)恢复一致;同时消除了"未加盐 MD5"与"重置后无法登录"两个问题 |
|
||||
| `internal/logic/register/do.go:30` | `bcrypt.MinCost` → `bcrypt.DefaultCost` | 修复 P5(cost 4 → 10) |
|
||||
| `internal/logic/account/set_password.go:35` | `bcrypt.MinCost` → `bcrypt.DefaultCost` | 修复 P5 |
|
||||
| `internal/models/query.go:21` | `bcrypt.MinCost` → `bcrypt.DefaultCost` | 修复 P5(`InitData` 仍未被调用) |
|
||||
|
||||
验证:`gofmt` 无差异;`GOWORK=off go build ./...` 与 `go vet ./internal/...` 均通过。
|
||||
|
||||
> 历史 MD5 密码记录无法用 bcrypt 校验,需通过"重置密码"流程迁移(本次改动后重置将写入 bcrypt)。
|
||||
|
||||
### 2026-09-22:验证码校验、找回密码票据与 Token 前缀(对应 P1、P2、P3、P6)
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| S1(原 P1/P2) | 高 | 验证码登录/快捷登录/注册/找回四条路径均不校验验证码 | 已修复:新增模块内验证码校验函数(`internal/vars/cache.go` 定义 Redis 键前缀常量,与 sender 侧 `/SMS/Code/` + 手机号规则一致),按 Redis 读取比对,**校验成功后删除键(一次性)**;四条路径全部接入 |
|
||||
| S2(原 P3) | 高 | `Forget.Reset` 仅凭 `identity` 即可改任意账号密码 | 已修复:`Forget.Verify` 真实校验 `phone + code` 后写入一次性重置票据(Redis,带 TTL);`Forget.Reset` 先检查票据存在才允许改密,改密成功后立即删除票据(防重放)。未改 proto,用现有两步流程实现 |
|
||||
| H3(原 P6) | 高 | Token 缓存键前缀 `/TOKEN/` 与 `/token/` 不一致 | 已修复:统一引用 `internal/vars.TokenPrefix` 常量,签发与校验/登出的键完全一致 |
|
||||
|
||||
> 本轮未修改 `proto/*.proto` 与 `pb/*.go`。
|
||||
|
||||
**遗留(未处理)**:P7 KYC 空 stub、P8 验证码接口未接入、P9 日志泄露 PII、P10 事务与错误处理缺失、全模块无测试,以及报告中「中/低」级别的各项。
|
||||
|
||||
|
||||
@@ -196,3 +196,20 @@ flowchart TD
|
||||
12. **流式方法的前置约束**(A10):在 `grpc.NewServer` 处补 `grpc.ChainStreamInterceptor`,与 unary 共用同一份 `validate`;若短期内不打算支持流式,也在代码中写明"新增流式方法前必须先加拦截器"。
|
||||
|
||||
> 本报告只列与现有实现直接相关的修复项,不引入新的分层或抽象封装。审计中"把两个聚合入口的 server 抽成公共包""给动态 RPC 引入请求 DTO 层""用服务网格解决 mTLS"一类改造不在此列。
|
||||
|
||||
## 8. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| A1 | 高 | 生产/测试配置缺失,构建脚本不覆盖 `pkgs/*` | 已修复:新增 `etc/default_prod.yaml`、`etc/default_test.yaml`(字段名对齐 SDK 规范,敏感值用 `${ENV}` 占位);`scripts/build-all-linux.sh` 的扫描根从仅 `module/` 扩展为 `module/` + `pkgs/`,并去掉固定 `BSM_RuntimeMode=dev` |
|
||||
| A2 | 高 | session 密钥取未校验的 `SecretKey`(默认 `CHANGE_ME`) | 已修复:`internal/config` 增加非空与非公开默认值校验,缺失/为 `CHANGE_ME` 时启动失败并给出中文提示 |
|
||||
| A3 | 高 | JWT 密钥默认值是可直接使用的公开字面量 | 已修复:在 `internal/config` 显式校验并拒绝 SDK 侧公开默认密钥(`Cblocksmesh2022C`),未通过环境变量提供合法密钥时启动失败(未改 SDK) |
|
||||
| A4 | 高 | gateway 404 与业务 `NotFound` 不可区分,真实响应被覆盖 | 已修复:改用 grpc-gateway 的 `WithRoutingErrorHandler` 标记「路由未命中」(`recorder.markRoutingMiss()`),仅在这种情况下才回退 Gin 的纯文本 404;业务返回的 `NotFound` 由 `gwRuntime.DefaultRoutingErrorHandler` 原样透出 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
@@ -203,3 +203,21 @@ flowchart TD
|
||||
12. **入口限流与可观测**(E8、E18):在 `httpMiddleware` 内对匿名路径加一个基于内存的简单计数限流;`http.Server` 补 `WriteTimeout`;按 `BSM_RuntimeMode` 设置 gin 模式;注册 `HEAD /` 健康端点。
|
||||
|
||||
> 本报告只列与现有实现直接相关的修复项,不引入新的分层或抽象封装。审计中"合并两个聚合入口""为聚合引入配置中心/服务注册中心""把动态 RPC 改造成网关插件"一类改造不在此列。
|
||||
|
||||
## 8. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| E1 | 高 | JWT 密钥默认值是可直接使用的公开字面量 | 已修复:同 `pkgs/all` A3,显式拒绝公开默认密钥,缺失时启动失败(未改 SDK) |
|
||||
| E2 | 高 | session 密钥取未校验的 `SecretKey`(默认 `CHANGE_ME`) | 已修复:同 `pkgs/all` A2,增加非空与非公开默认值校验 |
|
||||
| E3 | 高 | 无 prod 配置,且构建脚本不覆盖 `pkgs/*` | 已修复:新增 `etc/default_prod.yaml`、`etc/default_test.yaml`;构建脚本覆盖聚合入口 |
|
||||
| E4 | 高 | gateway 404 与业务 `NotFound` 不可区分 | 已修复:同 `pkgs/all` A4,改用 `WithRoutingErrorHandler` 标记「路由未命中」,业务 `NotFound` 原样透出 |
|
||||
| E14 | 中 | 聚合不建表不播种,`Mgt.InitRootUser: true` 不生效 | 部分处理:聚合已打开自动迁移,启动时可为可达的模块建表;**播种(`InitData`/`InitRootUser`)位于各模块 `internal/` 下,聚合进程无法导入,未能执行**——需产品侧决策播种入口,未擅自扩大改动范围 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
@@ -303,3 +303,29 @@ flowchart TD
|
||||
10. **测试**:为 `Follow.Doing/Undo`(幂等与归属)、`Friend.ApplyDo/ApplyGet`(归属)、`TagFetch`(不再 panic)、`Fetch`(缓存三条分支)各补一条正例 + 一条边界用例(当前 0 测试)。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层或抽象封装。为 relation 引入"统一关系模型""好友/关注抽象层""DTO/VO 分层""缓存统一框架"一类改造不在建议范围内——上述 10 条都是对现有函数、SQL 与配置的最小修正。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| R1 | 高 | 好友申请详情无归属校验,可读取他人申请与留言 | 已修复:查询条件加归属限定 |
|
||||
| R2 | 高 | 可向任意申请追加留言(不校验归属与存在性) | 已修复:追加前校验该申请属于当前调用者 |
|
||||
| R3 | 高 | 通过申请时不与申请记录比对,可单方面加任意人为好友 | 已修复:通过前先按 identity 查出申请记录并校验双方身份,再建立好友关系 |
|
||||
| R4 | 高 | 好友删除/备注/置顶的归属条件列名与语义双错 | 已修复:按模型真实归属列修正,只能操作自己的关系记录 |
|
||||
| R5 | 高 | `Follow.Undo`、`Match.DoIgnore` 无归属删除 | 已修复:删除条件加当前用户归属 |
|
||||
| R6 | 高 | `TagDoUpdate` DEL 无归属限定、ADD 无归属与好友校验 | 已修复:两处均加归属条件,ADD 时校验好友关系存在 |
|
||||
| R7 | 高 | `Friend.TagFetch` 对 nil reply 取字段地址必然 panic | 已修复:先判空再取字段 |
|
||||
| R8 | 高 | `Friend.Fetch`/`ApplyFetch` 可返回 `(nil, nil)` 并在 `cacheErr` 分支 panic | 已修复:返回非 nil 空集合,修掉 nil 解引用 |
|
||||
| R9 | 高 | 7 个接口按不存在的列 `relation_id` 查询 | 已修复:全部改为模型实际存在的列,好友与标签功能恢复可用 |
|
||||
| R10 | 高 | `CollectionFriendData` 吞错误 + `Filed` 缺列 + `friend_total` 未统计 | 已修复:检查 `.Error`、修正列名、补上统计 |
|
||||
| R11 | 高 | `TagMemberFetch` 表错 + 列错 + `Pluck` 非指针 dest | 已修复:修正表名列名,`Pluck` 传指针 |
|
||||
| R12 | 高 | `GetrelationInfoDetailCardByMatch` SQL 无效 | 已修复:修正别名与 `ORDER BY` 位置,匹配列表可用 |
|
||||
| R13 | 高 | `Match.DoJoin`/`DoIgnore` 操作关注表,匹配状态永不更新 | 已修复:改为更新匹配记录表的状态字段 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
@@ -214,3 +214,24 @@ flowchart TD
|
||||
13. **文档与测试**:改写 `README.md:149-155,170,352,379,63-103` 与 `UPGRADE_SUMMARY.md:19-31,60-68` 中与实现不符的内容(路径、端口、渠道、Docker 文件);把 `test/grpc/*_test.go` 的 `Provider` 改成已实现的 `qq`;至少为 `GenValidateCode`(长度与字符集)、`VerifyPhone`、`ValidateEmail`、`Send` 的 `is_gen_code` 两分支各补一个表驱动用例(可用 `miniredis` 或直接把 Redis 操作收敛为可替换的客户端变量,注意不要为此新建抽象层,复用 `impl.RedisService` 现有赋值点即可)。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项,不引入新的分层、抽象封装或 DTO/VO 改造。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| S1 | 高 | 腾讯云短信为空实现,返回 `"null"` 且无错误 | 已修复:改为显式返回「未实现/渠道不支持」错误,绝不返回成功(未引入新的云厂商 SDK) |
|
||||
| S2 | 高 | 日发送量限制从未生效(`limitKey` 只读不写) | 已修复:校验前置,发送成功后 `Incr` 并设置当天过期时间,超限返回 `ErrSentLimit` |
|
||||
| S3 | 高 | 验证码 `SetNX` 忽略返回值却发送新码 | 已修复:检查 `SetNX` 结果,键已存在时不覆盖也不发送与 Redis 不一致的新码。**Redis 键规则 `/SMS/Code/` + 手机号保持不变**(passport/mall/mgt 依赖该规则) |
|
||||
| S4 | 高 | 黑名单无写入点、`BlackListFilter` 未读取 | 已修复:补齐写入入口并接入读链路,拦截真正生效 |
|
||||
| S5 | 高 | 验证码可重放 + 无尝试次数限制(校验分支写反) | 已修复:校验成功后删除键(一次性);增加失败尝试次数限制;修正原先在「不相等」分支才删键的逻辑错误 |
|
||||
| S6 | 高 | 验证码内容可由调用方指定/覆盖 | 已修复:不允许调用方覆盖验证码本身,只允许透传模板变量;无法区分的用法显式拒绝 |
|
||||
| S7 | 高 | `config.Spec.Code` 未校验即解引用 | 已修复:补非空校验,缺配置时返回明确错误而非 panic |
|
||||
| S8 | 高 | 聚合配置 provider 键为 `default`,代码要求 `qq`/`aliyun`/`tencent` | 已修复:统一 provider 键取值口径,聚合部署下不再恒 `ErrProviderIsNil` |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
@@ -345,3 +345,30 @@ flowchart TD
|
||||
11. **测试**:至少为 `TradeConsum`(并发扣减)、`ApplyCash`(重复提交)、`Callback`(金额不符/重复回调)、`FindWalletRecords`(过滤与分页)各写一条正例 + 一条边界用例;用 `go test -race` 覆盖渠道 client 的并发使用。
|
||||
|
||||
> 本报告只列出与现有实现直接相关的修复项。为 wallet 引入"统一支付网关抽象""回调事件总线""资金账户 DDD 分层"一类改造不在建议范围内——上述 11 条都是对现有函数的最小修正。
|
||||
|
||||
## 9. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| W1 | 高 | `Payment.Callback` 凭用户 JWT 即可把支付单置为成功(无验签/无金额核对/无幂等) | 已修复:回调改为渠道验签/解密后再取状态,并与本地支付单金额核对;增加幂等判断,重复回调不重复入账 |
|
||||
| W2 | 高 | 支付回调匿名清单与 JWT 实现矛盾,真实渠道回调不可用 | 已修复:回调鉴权口径与实现对齐,渠道回调路径可用 |
|
||||
| W3 | 高 | 充值入账链路断裂(`ChargeWallet` 无调用点,回调不增加余额) | 已修复:回调成功后调用入账,余额与交易流水同步写入 |
|
||||
| W4 | 高 | 钱包余额扣减读后写、无事务/条件更新(并发双花) | 已修复:改为条件更新 `WHERE balance >= ?` 并检查 `RowsAffected`,扣减失败即返回余额不足 |
|
||||
| W5 | 高 | 提现只校验不扣减、无幂等键 | 已修复:申请提现时在事务内真实扣减余额并写流水,加幂等防护防重复提交 |
|
||||
| W6 | 高 | 支付密码可被任意 JWT 直接覆盖;密码仅单轮 HMAC-SHA256 | 已修复:支付密码存储改为 bcrypt(`DefaultCost`)并加 6~32 位纯数字格式校验;**已设置后不再允许任意登录态直接覆盖**(现契约无「旧密码」字段,已存在 bcrypt 密码时返回 `ErrPermissionDenied`,需走安全重置流程)。完整「校验旧密码后改密」**需要新增 proto 字段,属契约外,未做** |
|
||||
| W7 | 高 | 支付宝分支 `Body` 为 nil 导致 `PayChannel=2` 必然 panic | 已修复:修正请求体初始化 |
|
||||
| W8 | 高 | `ByOrder`/`ByCharge` 在 `wErr` 判空前解引用 `myWallet.Identity` | 已修复:先判错再使用,避免空指针 panic |
|
||||
| W9 | 高 | `JsapiPreOrder` 无鉴权且金额由请求方指定 | 已修复:补鉴权,金额改为服务端按本地支付单核对 |
|
||||
| W10 | 高 | 微信 APIv3 密钥、商户号明文硬编码入库 | 已修复:凭据改为从配置/环境变量读取,不再明文写库 |
|
||||
| W11 | 高 | 余额/提现/消费全链路不写 `wallet_record` 流水 | 已修复:充值、消费、提现均写入交易流水 |
|
||||
| W12 | 高 | 生产与测试配置字段名不匹配,服务无法启动 | 已修复:按 SDK 规范重写 `etc/wallet_prod.yaml`、`etc/wallet_test.yaml` |
|
||||
| W13 | 高 | `wallet_dev.yaml` 缺 `Wallet`/`Alipay` 段导致 nil 解引用 | 已修复:补齐配置段 |
|
||||
| W14 | 高 | `Databases` 未做非空校验,缺失即 panic | 已修复:`internal/config` 增加非空校验,缺失时给出明确中文提示 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
@@ -177,3 +177,20 @@ flowchart TD
|
||||
10. **补最小 CI**(W7):即使不引入完整流水线,也可以在仓库内加一个"提交前执行 `scripts/verify-workspace.sh`"的钩子说明或最简 CI 任务(运行同一个脚本即可,无需新增脚本)。这一步只是让已有门禁真正生效,不新增框架或抽象层。
|
||||
|
||||
> 本报告只列与现有脚本/工作区定义直接相关的修复项,不引入新的构建系统、包管理抽象或 CI 框架。审计中"引入统一 Makefile/任务编排器""把脚本重写为 Go 工具""给工作区引入私有 module proxy"一类改造不在此列。
|
||||
|
||||
## 8. 整改记录(2026-09-22)
|
||||
|
||||
> 本节记录按本报告结论执行的代码整改。整改遵循**最小修正**原则:未引入新框架、抽象层、DTO/VO、事件总线,未拆分服务边界,**未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**;新增/修改注释均为中文;口令类摘要统一使用 bcrypt(验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储)。校验方式:`GOWORK=off go build ./...` + `GOWORK=off go vet ./...` + `gofmt -l`(仓库根 workspace 模式存在 genproto 拆包的 ambiguous import,属本机既有问题)。
|
||||
|
||||
| 编号 | 级别 | 问题 | 处理结果 |
|
||||
| --- | --- | --- | --- |
|
||||
| W1 | 高 | `api-docgen` 在当前检出下无法构建,且不在工作区与任何脚本覆盖范围内 | 已修复:整理其 `go.mod`/`go.sum` 后可 `GOWORK=off go build ./...`,并纳入工作区与 `update-all.sh`/`verify-workspace.*` 的检查范围 |
|
||||
| W2 | 高 | `api-docgen` 依赖版本与工作区长期漂移(6 处) | 已修复:把这 6 个包的版本对齐到工作区其它模块使用的版本,未顺手升级其它依赖 |
|
||||
| W6 | 中 | `verify-workspace.*` 对空模块列表静默成功、gofmt 不覆盖 `scripts/`、CRLF 文件必然失败 | 已一并处理:空模块列表改为报错退出非 0,门禁纳入 `scripts/` 下独立 module,并新增根目录 `.gitattributes`(`*.go`/`*.sh` 按 LF 检出) |
|
||||
| W3 | 中 | `go.work` 的 SDK `replace` 指向仓库外相对路径 | 已处理(文档化 + 前置校验):保留 `replace`,在 `verify-workspace.*` 增加 SDK 目录存在性前置检查并输出中文提示,同时在根 `README.md` 补充「本地开发前提」 |
|
||||
|
||||
### 未纳入本轮范围
|
||||
|
||||
报告中「中」「低」级别的项(分页上限、死代码、README 与实现不符、单测缺失、可维护性等)**本轮未处理**;如需继续,按各报告第 8 节「修复建议」的顺序推进即可。
|
||||
|
||||
> 本轮整改未修改任何 `proto/*.proto` 与 `pb/*.go`,因此少数需要新增接口字段才能完整实现的项目(已在处理结果中标注)做了安全降级。
|
||||
|
||||
Reference in New Issue
Block a user