@@ -5,6 +5,85 @@ All notable changes to this project will be documented in this file.
55The format is based on [ Keep a Changelog] ( https://keepachangelog.com/en/1.0.0/ ) ,
66and this project adheres to [ Semantic Versioning] ( https://semver.org/spec/v2.0.0.html ) .
77
8+ ## [ v0.4.1] - 2026-02-01
9+
10+ ### 🎉 Release Highlights
11+
12+ v0.4.1 是一次重要的安全与性能优化版本,主要亮点:
13+
14+ - ** CSRF 防护** - 双令牌模式的 CSRF 中间件,防止跨站请求伪造攻击
15+ - ** 流式 CSV 导出** - 支持大规模数据导出,内存占用从 O(N) 降至 O(batch_size)
16+ - ** 登录限流安全增强** - 可信代理配置,防止 IP 伪造绕过限流
17+ - ** CSV 导入性能优化** - Bloom Filter 预筛选 + 批量查询,显著提升冲突检测性能
18+ - ** 全面的测试覆盖** - 新增 8 个基准测试和覆盖 22 个模块的单元测试
19+
20+ ### Added
21+ - ** CSRF 防护中间件** - 双令牌模式,验证 ` X-CSRF-Token ` header 与 Cookie 匹配
22+ - 使用 ` subtle::ConstantTimeEq ` 进行常量时间比较,防止时序攻击
23+ - 安全方法(GET/HEAD/OPTIONS)和 Bearer Token 认证自动跳过
24+ - 认证端点(login/refresh/logout)自动跳过 CSRF 验证
25+ - ** 流式 CSV 导出** - 分批次流式导出(每批 10,000 条),支持 ` Transfer-Encoding: chunked `
26+ - 使用 ` spawn_blocking ` 将 CSV 序列化移到独立线程池,避免阻塞 worker 线程
27+ - 内存占用优化:导出 100 万条链接内存占用从 O(N) 降至 O(1000)
28+ - ** 可信代理配置** - 新增 ` api.trusted_proxies ` 配置项(支持 IP 和 CIDR 格式)
29+ - 登录限流 key 优先使用连接 IP(不可伪造),仅可信代理时使用 ` X-Forwarded-For `
30+ - 支持 IPv4/IPv6 CIDR 匹配(如 ` 192.168.1.0/24 ` )
31+ - ** 批量短码存在性检查 API** - ` batch_check_codes_exist() ` 方法,支持分批查询(每批 500 个)
32+ - ** API 常量模块** - 硬编码 Cookie 名称(` shortlinker_access ` , ` shortlinker_refresh ` , ` csrf_token ` )
33+ - ** 全面的基准测试套件** - 新增 8 个基准测试,覆盖缓存、IPC、密码哈希等关键路径
34+ - ` cache_layer ` : CompositeCache 各操作性能
35+ - ` import_conflict ` : CSV 导入冲突检测策略对比
36+ - ` ipc_protocol ` : IPC 协议序列化/反序列化性能
37+ - ` password ` : Argon2 密码哈希性能
38+ - ` utils ` : 短码生成、URL 验证等工具函数性能
39+ - ** 单元测试覆盖** - 新增测试覆盖 22 个模块(JWT、缓存层、存储层、服务层、错误处理等)
40+ - ** 集成测试套件** - 新增 ` link_service_tests.rs ` (865 行)和 ` storage_tests.rs ` (695 行)
41+
42+ ### Changed
43+ - ** Cookie 安全标志默认开启** - ` cookie_secure ` 默认改为 ` true ` ,强制 HTTPS 传输 Cookie
44+ - ` cookie_secure=false ` 时启动输出警告日志
45+ - ** 移除可配置 Cookie 名称** - 移除 ` access_cookie_name ` 和 ` refresh_cookie_name ` 配置项
46+ - 改为硬编码常量,减少攻击面
47+ - ** 升级依赖** - Rust 1.93-slim,移除 OpenSSL 依赖(使用 rustls)
48+
49+ ### Improved
50+ - ** CSV 导入冲突检测性能优化** - 全量加载 -> Bloom Filter 预筛选 -> 批量查询
51+ - 预扫描 CSV 提取所有 codes,使用 Bloom Filter 快速排除肯定不存在的 codes
52+ - 仅对可能存在的 codes 执行批量数据库查询
53+ - ** CSV 导出流式化** - 使用 ` stream::unfold ` 实现分页流式查询(每批 1000 条)
54+ - ** Dockerfile 构建优化** - 减少镜像层大小,静态链接编译,移除未使用的依赖
55+ - ** 查询条件构建** - 使用 SeaORM ` contains() ` 方法替代手动字符串拼接,防止通配符注入
56+ - ** 基准测试性能** - 手动创建运行时,避免每次迭代创建/销毁
57+
58+ ### Fixed
59+ - ** 健康检查未授权响应** - 统一业务码为 1(之前为 401),保持 API 响应格式一致性
60+ - ** Symlink 攻击防护** - 使用 ` create_new() ` 原子创建 ` admin_token.txt ` ,防止 TOCTOU 竞态条件
61+ - ** SeaORM contains() 误用** - 移除手动添加 ` % ` 通配符,` contains() ` 方法已自动处理
62+
63+ ### Security
64+ - ** IPC 权限控制** - Unix socket 文件创建后设置权限为 ` 0600 ` (仅属主可读写)
65+ - ** Admin Token 文件安全** - 原子创建文件 + Unix 权限 0600,防止 symlink 攻击
66+ - ** 登录限流增强** - 默认使用连接 IP(不可伪造),防止客户端伪造 IP 绕过限流
67+ - ** CSRF Cookie SameSite 设置** - CSRF Cookie 使用 ` Lax ` 模式,防止跨站 POST 请求
68+ - ** 认证方式显式标记** - 在 ` req.extensions() ` 中插入 ` AuthMethod ` ,CSRF 中间件根据标记判断是否跳过验证
69+
70+ ### Dependencies
71+ - 升级 Rust 至 1.93-slim
72+ - 移除 OpenSSL 依赖(使用 rustls)
73+
74+ ### Docs
75+ - 更新 Admin API 鉴权文档,新增 CSRF 防护说明
76+ - 更新配置文档,新增 ` api.trusted_proxies ` 说明
77+
78+ ### Migration Notes
79+
80+ ** ⚠️ 从 v0.4.0 升级注意事项:**
81+
82+ 1 . ** CSRF 防护默认启用** - Web 管理面板的所有变更操作需携带 ` X-CSRF-Token ` header
83+ 2 . ** Cookie 名称硬编码** - ` access_cookie_name ` 和 ` refresh_cookie_name ` 配置项已移除,现在固定为 ` shortlinker_access ` 和 ` shortlinker_refresh `
84+ 3 . ** Cookie Secure 默认开启** - 如需在非 HTTPS 环境使用,需显式设置 ` cookie_secure=false ` (启动时会有警告)
85+ 4 . ** 可信代理配置** - 如果在代理/负载均衡器后部署,建议配置 ` api.trusted_proxies ` 列表以正确识别客户端 IP
86+
887## [ v0.4.0] - 2026-01-23
988
1089### 🎉 Release Highlights
@@ -908,7 +987,8 @@ v0.3.0 是一个重大版本更新,包含大量安全增强、性能优化和
908987- Update README.md
909988- Initial commit
910989
911- [ Unreleased ] : https://github.com/AptS-1547/shortlinker/compare/v0.4.0...HEAD
990+ [ Unreleased ] : https://github.com/AptS-1547/shortlinker/compare/v0.4.1...HEAD
991+ [ v0.4.1 ] : https://github.com/AptS-1547/shortlinker/compare/v0.4.0...v0.4.1
912992[ v0.4.0 ] : https://github.com/AptS-1547/shortlinker/compare/v0.3.0...v0.4.0
913993[ v0.3.0 ] : https://github.com/AptS-1547/shortlinker/compare/v0.2.2...v0.3.0
914994[ v0.3.0-beta.3 ] : https://github.com/AptS-1547/shortlinker/compare/v0.3.0-beta.2...v0.3.0-beta.3
0 commit comments