v2.0.0 — 安全加固与性能优化
Fixed
- [P0] Middleware 悬空引用:
build()和execute()中 lambda 按引用捕获middlewares_[i]改为按值捕获,防止协程帧中 use-after-free - [P0] HttpServer timer 竞态:超时
steady_timer移到循环外复用,引入shared_ptr<atomic<bool>>存活标志 + RAII 守卫,消除 timer 回调访问已销毁 socket 的竞态 - [P0] GenericConnection 数据竞争:
reading_从bool改为std::atomic<bool>,修复stopRead()跨线程写入与readLoop()读取之间的数据竞争 - [P0] TcpServer acceptLoop use-after-this:协程 lambda 捕获
alive_标志,循环条件和co_await恢复后均检查存活性,防止析构后访问this - [P1] Multipart DoS 检查位置:Part 数量上限检查从
push_back之后移到之前,避免先分配后丢弃
Changed
- Middleware 重构:提取公共
buildChain()方法消除build()/execute()逻辑重复;新增无参execute(HttpRequest&)重载走缓存路径,双参execute(req, finalHandler)始终动态构建 - Session ID 生成:从
std::mt19937_64(伪随机)改为OpenSSL RAND_bytes(密码学安全),hex 编码改为查表法消除ostringstream开销 - Cookie 安全默认值:
CookieOptions默认httpOnly=true、secure=true、sameSite="Lax";SessionOptions::secure同步改为true - Session 嵌套锁消除:
Session::lastAccess_从chrono::time_point(mutex 保护)改为atomic<int64_t>纳秒时间戳,touch()/lastAccess()无锁操作 - send(PmrBuffer&&) 语义修复:改为调用
buffer.readAll()走send(std::string&&)的 move 通道,不再退化为拷贝 - Router urlDecode 快速路径:先扫描路径是否含
%/+,无编码字符时跳过urlDecode分配;RouteKey引入透明哈希(RouteKeyView+is_transparent),staticRoutes_.find()直接用string_view查找,消除每请求的std::string堆分配 - HttpServer 中间件调用:已
build()场景改用无参execute(req),每请求省去一次std::function堆分配
Added
SessionOptions::maxSessions(默认 100000):Session 存储上限,create()达到上限时返回nullptr,中间件返回 503
Full Changelog: v1.0.1...v2.0.0
Full Changelog: v1.0.1...v2.0.0