audit and harden workspace
This commit is contained in:
9
wiki/README.md
Normal file
9
wiki/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# BSM Infra Full Wiki
|
||||
|
||||
| 文档 | 内容 |
|
||||
| --- | --- |
|
||||
| [系统架构](architecture.md) | 模块边界、聚合入口、请求分流和依赖注入 |
|
||||
| [开发与运维](operations.md) | 配置、启动、验证、构建、发布和排障 |
|
||||
| [审计报告](audit-2026-08-10.md) | 已修复问题、剩余风险和后续优先级 |
|
||||
|
||||
修改模块入口、配置结构、聚合协议或发布方式时,应同步更新本目录和根 README。
|
||||
38
wiki/architecture.md
Normal file
38
wiki/architecture.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# 系统架构
|
||||
|
||||
## 模块边界
|
||||
|
||||
仓库包含 20 个 Go module:module 下 19 个业务模块可独立运行,all 聚合其中 15 个 base、ec、finance 服务;social 三个模块暂未聚合。
|
||||
|
||||
典型模块目录职责:
|
||||
|
||||
| 目录 | 职责 |
|
||||
| --- | --- |
|
||||
| cmd/main | 进程入口、配置和生命周期 |
|
||||
| internal/config | 模块配置 |
|
||||
| internal/impl | DB、Redis、etcd、内存缓存 |
|
||||
| internal/logic | 业务逻辑 |
|
||||
| internal/server | 服务构造与注册 |
|
||||
| service | 对 all 公开的 Expose API |
|
||||
| pb | protobuf 生成代码 |
|
||||
| etc | 配置样例 |
|
||||
|
||||
独立入口初始化自己的基础设施。聚合调用 Expose 时不重复初始化,而是注入 all 创建的共享对象。
|
||||
|
||||
## all 启动流程
|
||||
|
||||
1. 校验 --workspace 并读取 etc/<workspace>_<runtime>.yaml。
|
||||
2. 初始化共享 DB、Redis、etcd 和内存缓存。
|
||||
3. 创建统一 gRPC、grpc-gateway 和 Gin server。
|
||||
4. 按 Services 或 BSM_SERVICES 调用模块 Expose。
|
||||
5. 在一个 h2c 端口启动,并响应退出信号。
|
||||
|
||||
请求先按 gRPC Content-Type 分流;普通请求先进入 grpc-gateway,gateway 返回 404 时回退到 Gin。
|
||||
|
||||
## 依赖注入
|
||||
|
||||
ExposeOptions.Dependencies 可接收 RedisClient、etcd Client、gorm DB 和 Cache。参数非 nil 时覆盖模块 internal/impl 对象。address、market、order、mgt 的业务数据库访问已统一使用 internal/impl.DBService。
|
||||
|
||||
## 生命周期
|
||||
|
||||
统一 HTTP server 设置请求头读取超时、空闲超时和最大请求头。关闭时先执行 gRPC GracefulStop;超过 context 截止时间后强制 Stop,再关闭 HTTP server。
|
||||
53
wiki/audit-2026-08-10.md
Normal file
53
wiki/audit-2026-08-10.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# 代码审计报告(2026-08-10)
|
||||
|
||||
## 范围
|
||||
|
||||
覆盖根 workspace、all、19 个业务模块、配置样例和维护脚本。执行结构盘点、敏感信息扫描、TODO/异常退出扫描和全部 module 测试。
|
||||
|
||||
## 已修复
|
||||
|
||||
| 优先级 | 问题 | 处理 |
|
||||
| --- | --- | --- |
|
||||
| P0 | 19 个 go.mod 绑定 D:/work/bsm-sdk/core | 移除绝对路径 replace;20 个 module 测试仍通过 |
|
||||
| P0 | 样例含公网地址、固定 secret 和开发机私钥路径 | 改为 localhost 或 CHANGE_ME |
|
||||
| P1 | workspace 直接参与路径构造 | 限制字符和长度、转小写、增加测试 |
|
||||
| P1 | 聚合入口缺少连接防护 | 增加 ReadHeaderTimeout、IdleTimeout、MaxHeaderBytes |
|
||||
| P1 | gRPC GracefulStop 可能无限等待 | 受 context 约束,超时强制 Stop |
|
||||
| P2 | 缺少统一验证入口 | 新增 PowerShell 和 Bash 验证脚本 |
|
||||
| P2 | README 乱码且过时 | 重写 README 并建立 wiki |
|
||||
|
||||
## 尚存风险
|
||||
|
||||
### P0:默认管理员密码
|
||||
|
||||
module/base/mgt/internal/models/init_db.go 仍包含 root 默认密码 123456。建议改为必填环境变量或一次性随机密码;未提供安全凭据时拒绝初始化。
|
||||
|
||||
### P1:弱密码哈希
|
||||
|
||||
market、mall 等部分逻辑仍使用 MD5 加盐。应迁移至 bcrypt、scrypt 或 Argon2id,并采用登录时升级旧哈希的兼容策略。
|
||||
|
||||
### P1:reflection 与明文 h2c
|
||||
|
||||
all 默认启用 gRPC reflection,自身不终止 TLS。生产环境应在可信网络运行,由网关终止 TLS,并将 reflection 改为配置控制。
|
||||
|
||||
### P1:未实现接口
|
||||
|
||||
social、wallet、mall、cms 等仍有模板 TODO。编译成功不代表功能完整;未实现 RPC 应明确返回 Unimplemented。
|
||||
|
||||
### P2:测试覆盖不足
|
||||
|
||||
多数 package 没有测试。应优先覆盖认证、权限、支付、订单状态机、迁移和 all 请求分流。
|
||||
|
||||
### P2:迁移与启动耦合
|
||||
|
||||
多个 models.New 会自动迁移或 seed。建议拆分连接、迁移、seed,支持蓝绿发布、只读实例和回滚。
|
||||
|
||||
## 建议路线
|
||||
|
||||
1. 消除默认管理员密码并迁移弱密码哈希。
|
||||
2. 配置化 reflection、初始化行为和 TLS 信任边界。
|
||||
3. 为 auth、mgt、order、wallet 建立核心路径测试。
|
||||
4. 将数据库迁移和 seed 从进程启动拆出。
|
||||
5. CI 增加 workspace 验证、凭据扫描、proto 一致性和依赖漏洞扫描。
|
||||
|
||||
审计基线:全部 20 个 workspace module 的 go test ./... 通过;不包含真实基础设施集成测试。
|
||||
45
wiki/operations.md
Normal file
45
wiki/operations.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# 开发与运维
|
||||
|
||||
## 配置
|
||||
|
||||
配置路径规则为:
|
||||
|
||||
<BSM_Prefix>/etc/<serviceKey>_<BSM_RuntimeMode>.yaml
|
||||
|
||||
all 的 serviceKey 来自 --workspace,默认 default。BSM_RuntimeMode 默认 dev,BSM_SERVICES 可覆盖聚合服务列表。
|
||||
|
||||
## 验证
|
||||
|
||||
Windows:
|
||||
|
||||
./scripts/verify-workspace.ps1
|
||||
|
||||
Linux/macOS:
|
||||
|
||||
./scripts/verify-workspace.sh
|
||||
|
||||
脚本对每个 module 执行 go vet 和 go test,并检查 gofmt。依赖真实服务的测试应使用 integration tag。
|
||||
|
||||
## 构建
|
||||
|
||||
scripts/build-all-linux.sh 构建 module 下独立服务到 .builds。all 可单独构建:
|
||||
|
||||
cd all
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -o ../.builds/all ./cmd/main
|
||||
|
||||
## 发布检查
|
||||
|
||||
1. workspace 验证通过。
|
||||
2. git diff --check 通过。
|
||||
3. 配置不存在 CHANGE_ME。
|
||||
4. 数据库迁移已在预发布验证。
|
||||
5. Services 仅包含计划发布服务。
|
||||
6. TLS、访问控制、日志脱敏和监控已配置。
|
||||
7. 已准备二进制及数据库回滚方案。
|
||||
|
||||
## 排障
|
||||
|
||||
- 配置不存在:检查工作目录、BSM_Prefix、BSM_RuntimeMode 和 workspace 文件名。
|
||||
- 服务未注册:检查 Services 与 BSM_SERVICES。
|
||||
- 启动失败:检查端口、DSN、Redis、etcd 和迁移权限。
|
||||
- gateway 404:确认 proto gateway 注册;Gin 只在 gateway 404 后接管。
|
||||
Reference in New Issue
Block a user