1.0.6
Spring AI 1.0.6 正式发布,累计合并 10 个提交,涉及 195 个文件(+2,039 / -386 行),主要聚焦于安全加固、Spring Boot 升级及向量存储过滤器表达式修复的持续完善。
安全加固
1.0.6 修复了多处潜在的安全隐患:
CosmosDB VectorStore —— SQL 注入修复
doDelete()方法中的SELECT查询从字符串格式化改为参数化查询(SqlQuerySpec+SqlParameter),避免了 ID 注入风险
VectorStoreChatMemoryAdvisor —— 过滤器注入修复
- 会话记忆过滤器表达式从原始字符串拼接(
"conversationId=='" + id + "'")改为使用FilterExpressionBuilder构建,防止 conversationId 中包含特殊字符导致过滤器注入
PDF 解析器 —— 内存安全保护
- 新增恶意 PDF 防护:当计算出的换行数超过 10,000 行时抛出
IllegalStateException,防止畸形 PDF 文件导致内存耗尽
Transformers Embedding —— 缓存目录安全
- 默认缓存目录从可预测路径
{java.io.tmpdir}/spring-ai-onnx-generative改为使用Files.createTempDirectory("spring-ai-model-cache")创建的唯一用户私有目录,防止符号链接攻击和竞态条件
模型厂商
Bedrock Converse
- 集成测试模型更新为
us.anthropic.claude-haiku-4-5-20251001-v1:0
核心改进
向量存储过滤器表达式持续修复
延续 1.0.5 的过滤器表达式改进,1.0.6 进一步修复了更多向量数据库实现中的 Key 处理问题:
Typesense —— 新增过滤器安全校验
TypesenseFilterExpressionConverter新增严格的 Key 字符校验,仅允许字母数字、下划线、点号和连字符- 新增引号 Key 自动剥离:
"key"和'key'自动规范化为key - 拦截含冒号、空格、括号、竖线等特殊字符的 Key,防止过滤器语法注入
- 新增 199 行完整测试覆盖,包含 10 项安全测试用例
Weaviate —— JSON 序列化修复
WeaviateFilterExpressionConverter.doKey()改用emitJsonValue()安全输出 Key 值,替代原有的字符串拼接方式
VectorStoreChatMemoryAdvisor —— conversationId 处理规范化
- 使用类型安全的
FilterExpressionBuilder替代手动字符串拼接过滤器表达式 - 整合
SearchRequest和Document的 import 声明
Bug Fix 汇总
| 问题 | 修复 |
|---|---|
CosmosDB doDelete() SQL 注入风险 | 改用参数化查询 SqlQuerySpec |
| VectorStoreChatMemoryAdvisor 过滤器注入 | 改用 FilterExpressionBuilder 构建 |
| 畸形 PDF 可导致无限内存分配 | 新增 10,000 行上限检查 |
| Transformers 缓存目录可预测 | 改用 createTempDirectory 创建唯一目录 |
| Typesense 过滤器 Key 无校验 | 新增严格字符白名单校验 |
| Weaviate 过滤器 Key JSON 注入 | 改用 emitJsonValue 安全序列化 |
基础设施
- Spring Boot 升级至 3.5.14 —— 从 3.5.11 经 3.5.13 升至最新补丁版本
- JDBC 聊天记忆 PostgreSQL 集成测试命名规范化(补充
IT后缀)
Spring AI 1.0.6 以安全加固为核心,修复了多项潜在注入漏洞,同时保持了与 1.0.5 的完全兼容性。