fix version 1
This commit is contained in:
@@ -150,3 +150,55 @@ flowchart LR
|
||||
## 八、与 2026-08-10 审计报告的关系
|
||||
|
||||
`wiki/audit-2026-08-10.md` 聚焦"workspace 结构、样例凭据、进程与端口防护",其列出的 P0/P1 多数已整改。本报告在其基础上**下沉到业务实现层**,发现的 P0 数量与严重度显著高于前次——原因是前次未逐接口审计业务逻辑。两份报告不冲突,应合并为同一整改清单跟踪。
|
||||
|
||||
## 九、整改结果(2026-09-22)
|
||||
|
||||
按第六节的优先级路线,已对**全部 18 个业务服务 + 2 个聚合入口 + 工作区/工程脚本**执行整改,覆盖各服务报告中标注为「高」的全部条目(**132 项**,含本报告 P0/P1 台账)。逐服务的「处理结果」见 `docs/<服务名>.md` 的「整改记录」章节。
|
||||
|
||||
### 整改原则
|
||||
|
||||
| 约束 | 执行情况 |
|
||||
| --- | --- |
|
||||
| 不做过度设计/过度封装 | 未引入新框架、抽象层、DTO/VO、事件总线、消息队列;未拆分服务边界;未引入 DDD/CQRS |
|
||||
| 加密统一 bcrypt | 口令类摘要全部为 `bcrypt`(`DefaultCost`):passport、mgt、mall、market、wallet 支付密码、wallet 改密校验旧密码。验证码等短时效一次性凭证仍按原有 Redis 明文比对链路存储(用 bcrypt 会破坏跨模块链路) |
|
||||
| 注释中文化 | 新增/修改的注释、配置注释、脚本提示均为中文 |
|
||||
| 契约冻结 | **未修改任何 `proto/*.proto` 与生成的 `pb/*.go`**(本机无 protoc);少量需新增字段才能完整实现的项目做了安全降级,已在对应报告中标注 |
|
||||
|
||||
### 关键整改落点
|
||||
|
||||
| 域 | 结果 |
|
||||
| --- | --- |
|
||||
| 资金链路 | wallet:回调改渠道验签+金额核对+幂等、充值入账接通、余额与提现改条件更新+事务+流水、支付密码改 bcrypt 且须校验旧密码、渠道凭据不再明文入库、配置字段名修正。order:模拟接口加 dev 开关与鉴权、`OrderApprove` 补鉴权与状态校验、优惠券改减法、扣库存原子更新防超卖、取消订单回补库存、`store_id`/单价取值修正、五类越权补归属校验 |
|
||||
| 认证与会话 | passport:四条路径接入真实验证码校验、找回密码改一次性票据、Token 键前缀统一、密码哈希 bcrypt。mgt:`AppKey` 登录改 bcrypt 比对、移除 `root/123456` 弱口令。mall:员工验证码登录补校验 |
|
||||
| 越权批量化 | address、cms、group、relation、feed、mall、market、feedback 共 8 个模块按「主键操作必带归属条件」补齐;涉及改删他人地址/内容/动态/群成员、单方面加好友、无鉴权审核开号等 |
|
||||
| 上线阻断 | pkgs/all、pkgs/ecmall:补 prod/test 配置、构建脚本覆盖聚合入口、拒绝公开默认 JWT/session 密钥、修复 gateway 404 与业务 `NotFound` 的分流;聚合启动补建表/播种。scripts:`api-docgen` 恢复可构建并纳入门禁、依赖版本对齐、`verify-workspace.*` 空列表改为报错、新增 `.gitattributes` 保证 LF 检出 |
|
||||
| 恒失败接口 | group、relation、initial、feed、logs 的列名/键名/占位问题修正;address 命名返回值修复;social 三服务的 gateway 接线与聚合注册补齐 |
|
||||
| 静默故障 | sender 腾讯云短信空实现改为显式报错、日限额与黑名单真正生效、验证码 `SetNX` 与重放问题修正;logs 的 IP 过滤方向、分页、panic 修正 |
|
||||
|
||||
### 校验
|
||||
|
||||
全部 21 个 module(18 业务服务 + `pkgs/all` + `pkgs/ecmall` + `scripts/api-docgen`)均通过 `GOWORK=off go build ./...`、`GOWORK=off go vet ./...`、`gofmt -l`;`pkgs/all`、`pkgs/ecmall`、`module/base/fts` 的既有单测通过(`fts` 新增的路径穿越防护用例由失败转通过)。`module/base/sender` 的 `test/grpc/*_test.go` 带 `integration` 构建标签、需要真实服务,不在 `go test ./...` 范围内执行。
|
||||
|
||||
> 说明:在仓库根以 workspace 模式编译会报 genproto 拆包的 `ambiguous import`,属**本机既有的依赖解析问题**;各模块内以 `GOWORK=off` 模块模式编译正常,本轮即以此校验。
|
||||
|
||||
### 部署前置(本次整改新增/强化的环境变量)
|
||||
|
||||
以下变量**未提供时服务将拒绝启动或明确报错**,不再回退到仓库中的公开样例值:
|
||||
|
||||
| 环境变量 | 用途 | 未配置后果 |
|
||||
| --- | --- | --- |
|
||||
| `BSM_JwtSecretKey` | 聚合入口 JWT 签名密钥(16/24/32 字节,须为私有值) | `pkgs/all`、`pkgs/ecmall` 启动即 `log.Fatalln` 并给出中文提示;公开样例值同样被拒 |
|
||||
| `BSM_SECRET_KEY` | 聚合入口 session cookie 的 HMAC 密钥 | 启动即拒绝(空值或 `CHANGE_ME` 均不可用) |
|
||||
| `BSM_MGT_SECRET_KEY` | 聚合内 mgt 子配置的密钥 | prod/test 配置以 `${BSM_MGT_SECRET_KEY}` 占位,需部署时注入 |
|
||||
| `BSM_CloudPrivateKey` | `cloud` 私人资料内容的 AES-GCM 加解密密钥(≥16 字节) | 私人资料写入/读取返回内部错误,不再以公开默认密钥「假加密」 |
|
||||
| `BSM_MGT_ROOT_PASSWORD` | `mgt` 初始超级管理员口令 | 不再创建 `123456`;未设置时 root 口令为空、不可登录(日志提示) |
|
||||
| `BSM_DB_DSN`、`BSM_MINIO_*`、`BSM_ALIPAY_*`、`BSM_JUMIO_*` 等 | 数据库、对象存储、支付与 KYC 渠道凭据 | 各模块 `etc/*.yaml` 已统一改为 `${...}` 占位,不再硬编码真实凭据 |
|
||||
|
||||
> 仓库中原有的真实库口令(`Weidong1214`)、弱口令(`123456`)与公开 JWT 样例密钥(`Cblocksmesh2022C`)已从 `module/`、`pkgs/`、`scripts/` 全量清除。
|
||||
|
||||
### 仍未处理
|
||||
|
||||
- 各报告中「中」「低」级别项:分页上限、死代码/死配置、README 与实现不符、reflection 与 TLS、XFF 可信性、登录限流、CI 接入、单测覆盖等。
|
||||
- 需新增契约字段才能完整实现的项目:feed/cms 的互动去重(缺「谁点过」记录表)、mall 许可码校验(缺数据源)、部分角色的细粒度权限判定。
|
||||
- **历史数据迁移**:库中此前的 MD5 / 明文口令记录无法被 bcrypt 校验,需通过「重置密码」流程迁移(整改后重置将写入 bcrypt)。
|
||||
- 全仓单测覆盖仍然薄弱,第六节第 5 条「补护栏」尚未执行。
|
||||
|
||||
Reference in New Issue
Block a user