docs: 分发 CHANGELOG 内容到各模块文档并删除 CHANGELOG.md

- gateway/README.md: 新增 0.8.0 版本条目(P0 安全修复、进程退出 bug 修复、完整特性列表),修正版本号 0.7.0→0.8.0
- libhttp/README.md: 新增 v3.4.4 版本条目(Listener::close、doAccept 递归修复、stop() 改进)
- README.md: 修正 gateway 版本号 v0.5.3→v0.8.0
- docs/INDEX.md: 移除 CHANGELOG 引用行
- 删除 CHANGELOG.md(内容已分发,安全审计详情已在 gateway_SECURITY_AUDIT_20260807.md 完整覆盖)
This commit is contained in:
qing committed 2026-08-08 14:49:21 +00:00
1 parent 17bc69c45e
commit 0af9019af8
5 files changed
+7 -87

No files matched your search

-83
View File
@@ -1,83 +0,0 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/lang/zh-CN/).
## [Unreleased]
### Security - 安全修复
#### Gateway v0.8.0 (2026-08-07)
**P0 严重问题修复:**
- 修复 HttpException 错误消息泄露内部处理步骤问题(Login/Register/Reset错误消息脱敏)
- 原消息 `"Login (Query Step) Failed"` → 改为 `"Login failed, please try again later"`
- 原消息 `"Login (Update Step) Failed"` → 改为 `"Login failed, please try again later"`
- 原消息 `"Registe Failed"`(拼写错误)→ 改为 `"Registration failed, please try again later"`
- 原消息 `"Reset Failed"` → 改为 `"Password reset failed, please try again later"`
- 修正注册失败 HTTP 状态码:400 → 500(服务端内部错误)
- **所有 P0 安全问题已全部修复**,安全评级从 B+ 提升至 A-
**进程无法退出/杀不死 Bug 修复(关键修复):**
修复了 gateway 模块收到 SIGTERM/SIGINT 后进程无法正常退出的多个根本原因:
1. **信号处理安全问题(高)**:
- 原信号处理函数调用 `std::cout` 和 `_SERVE->stop()` 等非 async-signal-safe 函数,可能导致死锁
- 改为安全模式:仅设置 `volatile std::sig_atomic_t` 原子标志,使用 `write()` 输出提示(write 是 async-signal-safe)
- 主线程轮询检测标志后在安全上下文执行关闭流程
2. **SIGPIPE 未处理(中)**:
- 新增 SIGPIPE 信号忽略处理,防止写已关闭 socket 时内核意外终止进程
3. **Listener 无限递归 Bug(严重)**:
- `doAccept()` 在 acceptor 关闭后错误分支仍无条件递归调用自身,导致 CPU 100% 空转
- 修复:acceptor 关闭或 `operation_aborted` 错误时停止接受循环
- 新增 `Listener::close()` 公开方法,可显式关闭 acceptor 停止接受新连接
4. **stop() 流程顺序问题(中)**:
- 改进 `HttpServer::stop()` 关闭顺序:
1. 先关闭 acceptor,停止接受新连接
2. 清空 WebSocket 客户端
3. 停止 io_context 事件循环
4. 等待所有 worker 线程退出
5. 重置 listener
5. **关闭无超时保护(高)**:
- 服务器 stop() 添加 8 秒超时保护,超时后 `std::exit(1)` 强制退出
- 日志 shutdown() 添加 3 秒超时保护,超时后丢弃剩余日志退出
- **保证进程绝不会挂死**,极端情况下最多 11 秒内必定退出
6. **启动/关闭架构改进**:
- 服务器事件循环改为在独立线程运行,主线程负责信号检测和关闭协调
- 服务器异常退出也能被主线程检测到并正确清理资源
**Libhttp 改进:**
- Listener 新增 `close()` 方法
- 修复 doAccept 关闭后的无限递归问题
- stop() 流程更健壮,分步输出日志便于排障
### Docs - 文档更新
- 新增 `docs/security/gateway_SECURITY_AUDIT_20260807.md` 安全审计复审文档
- 更新审计修复进度:P0 问题 100% 修复,总体修复率 56%
- 安全评级更新:B+(良好)→ A-(优秀)
---
## [0.8.0] - 2026-07-xx (之前版本)
### Added - 新增功能
- Gateway v0.8.0 初始版本
- Token 双轨吊销机制(jti 黑名单 + 用户版本号)
- 错误信息脱敏(不返回源码路径/C++类型名)
- JTI 黑名单内存有界保护(5000条阈值+过期清理)
- 反向代理响应大小限制(libhttp 默认 10MB)
- 集中式异步日志客户端 LogC(批量推送+fail-safe)
- WebSocket 代理支持(管理员权限校验)
- 多层速率限制(IP级+邮箱级)
- PBKDF2-HMAC-SHA256 密码哈希(10万轮)
- RSA Token 签名验签
- HttpOnly+Secure+SameSite Cookie
- 密码强度校验
+1 -1
View File
@@ -84,7 +84,7 @@
- 极客操作:`kill -HUP <pid>` 热加载规则;`waf -list` 列规则;`waf -test <file>` 校验语法;`waf -check "<input>"` 测试单条输入。
- 配置见 [waf/config.yaml](waf/config.yaml),详见 [waf/README.md](waf/README.md)。
### gateway(应用层网关 · v0.5.3)
### gateway(应用层网关 · v0.8.0)
- 内部 HTTP 服务,默认监听 127.0.0.1:8443,不再承载 TLS(TLS 已由 WAF 终止)。
- 通过 `Server.tls = on/off` 配置切换 HTTPS/HTTP 模式([example.ini](gateway/example.ini)),独立部署时仍可启用 TLS。
+2 -1
View File
@@ -19,7 +19,6 @@ docs/
| 文档 | 路径 | 说明 |
|------|------|------|
| 项目 README | [../README.md](../README.md) | 架构总览、服务说明、安装运行指南 |
| 更新日志 | [../CHANGELOG.md](../CHANGELOG.md) | 版本变更记录、安全修复、功能更新 |
---
@@ -63,6 +62,7 @@ docs/
|------|------|
| [core_CODE_REVIEW_LOG_20260730.md](reviews/core_CODE_REVIEW_LOG_20260730.md) | Core 模块代码审查日志(2026-07-30,自动化审查) |
| [DEPLOY_DEFECT_AUDIT_20260806.md](reviews/DEPLOY_DEFECT_AUDIT_20260806.md) | 部署缺陷审查(2026-08-06,首次原生部署实录,含修复记录) |
| [actpred_CODE_AUDIT_20260808.md](reviews/actpred_CODE_AUDIT_20260808.md) | actpred 模块代码审计(2026-08-08,PyTorch 动作预测,16 项发现) |
---
@@ -114,6 +114,7 @@ docs/
| aibox | [../aibox/README.md](../aibox/README.md) | AI 智能体系统 |
| bot4cj | [../bot4cj/README.md](../bot4cj/README.md) | 机器人硬件脚本解析器(仓颉) |
| BotOps | [../BotOps/README.md](../BotOps/README.md) | 运维控制面板 |
| actpred | [../actpred/README.md](../actpred/README.md) | 动作预测神经网络(PyTorch) |
| lci | [../lci/README.md](../lci/README.md) | LCI 交互式终端框架 |
| tests | [../tests/blackbox/README.md](../tests/blackbox/README.md) | 黑盒测试套件 |
+3 -2
View File
@@ -275,14 +275,15 @@ gateway/
## 版本
`0.7.0`(见 [src/main.cpp:31](src/main.cpp#L31))。启动时打印:
`0.8.0`(见 [src/main.cpp:35](src/main.cpp#L35))。启动时打印:
```
Gateway 0.7.0 started
Gateway 0.8.0 started
```
近期变更:
- `0.8.0`:**P0 安全问题全部修复**(安全评级 B+ → A-)——HttpException 错误消息脱敏(4 处内部步骤消息替换为用户友好文案,修正注册失败状态码 400→500);**进程退出 bug 修复**——信号处理改为 async-signal-safe(仅设 `volatile sig_atomic_t` 标志 + `write()` 输出)、新增 SIGPIPE 忽略、stop() 添加 8 秒超时保护 + 日志 3 秒超时(保证 11 秒内必定退出)、服务器事件循环改在独立线程运行;Token 双轨吊销机制(jti 黑名单 + 用户版本号)、错误信息脱敏(不返回源码路径/C++ 类型名)、JTI 黑名单内存有界保护(5000 条阈值 + 过期清理)、反向代理响应大小限制(libhttp 默认 10MB)、集中式异步日志客户端 LogC、WebSocket 代理(管理员权限校验)、多层速率限制(IP 级 + 邮箱级)、PBKDF2-HMAC-SHA256 密码哈希(10 万轮)、RSA Token 签名验签、HttpOnly+Secure+SameSite Cookie、密码强度校验。
- `0.7.0`:配置体系完全迁移到 confs 统一配置服务——配置文件统一存放于 `confs/configs/gateway.ini`(原 example.ini 内容 + `[Downstream]` 段),删除本地 example.ini,移除 `-i/--input` 命令行参数(不再支持本地 ini 文件回退,与 static 模块一致);启动时从 confs(`CONFS_HOST`/`CONFS_PORT`,默认 `127.0.0.1:8010`)通过 pymsg `get` 路由拉取配置(`retry_on_refused=true`);`ConfIni` 增加 `fromString()`/`env()`/`env_int()`;环境变量覆盖支持 `LISTEN_ADDR`/`LISTEN_PORT`/`DB_HOST`/`DB_PORT`/`CAPTCHA_HOST`/`CAPTCHA_PORT`/`SMTP_HOST`/`SMTP_PORT`;配置完整性校验;`DbC` 增加 `init(host, port)`,main.cpp 所有硬编码 captcha/smtp/db 地址改为配置变量,`logs().set_endpoint()` 启动时初始化;`--version/-v` 选项补全实现;版本升至 0.7.0。
- `0.6.1`:pymsg 客户端增加 `retry_on_refused` 重试机制——新增 `MsgConnectionRefusedException`;`MsgClient::call()` 新增 `retry_on_refused`/`retry_interval` 参数;`DbC::call_msg()` 启用重试等待 db 就绪;`LogC::_send()` 显式不重试(fail-safe)。
- `0.6.0`:WebSocket 反向代理(仅管理员)——新增 `[WsProxy]` 配置段,支持 `routes = /path=ws://host:port/target;...` 精确路径映射;握手阶段校验 Token 中 `is_admin=true`(基于 `Admin.users` 白名单),通过后双向透明桥接文本/二进制帧到后端,支持 `ws://` 和 `wss://`;后端连接错误/鉴权失败均优雅关闭。依赖 libhttp v3.1+ 的 `ws_proxy()` 接口。顺带修复 `LocalTime.hpp` 在 Apple clang 下 C++20 tzdb 不可用的编译问题(改用 `strftime`/`get_time`/`mktime`)。
+1
View File
@@ -300,6 +300,7 @@ using WebSocketClientBase = HttpClient;
## Version History
- **v3.4.4**: 进程退出稳定性修复(配合 gateway v0.8.0)。Listener 新增 `close()` 公开方法(显式关闭 acceptor 停止接受新连接);修复 `doAccept()` 在 acceptor 关闭或 `operation_aborted` 错误后无条件递归调用自身导致 CPU 100% 空转的 bug;`HttpServer::stop()` 改进关闭顺序(先关 acceptor → 清空 WS 客户端 → 停 io_context → 等 worker 线程退出 → 重置 listener),分步输出日志便于排障。
- **v3.4.3**: WebSocket 发送/代理队列上限(P1-6)。新增 `setMaxWsQueueSize()`(默认 1000);`wsSend` / `onProxyReadClient` / `onProxyReadBackend` 入队前检查,超限判定慢消费者并关闭连接,防止无界队列内存耗尽。
- **v3.4.2**: 服务器读超时防 Slowloris(P1-4)。新增 `setHeaderTimeout()`(默认 10s)/`setReadTimeout()`(默认 30s);`doRead` 两阶段读(`async_read_header` 头超时 → `async_read` 体超时),`doSSLHandshake` 覆盖握手超时,`doWsRead` 设 WS 空闲超时,对齐 WAF ReadHeaderTimeout/ReadTimeout。
- **v3.4.1**: WebSocket 单条消息大小限制(P1-3)。新增 `setMaxWsMessageSize()`/`getMaxWsMessageSize()`(默认 16MB,与 Beast 默认一致),服务端 `doWsUpgrade`/`doWssUpgrade` 与代理 `onProxyConnect`/`onProxySslHandshake` 创建流后调用 `read_message_max()`,超限消息由 Beast 在分配内存前拒绝并关闭连接,防 OOM。