跳到主要内容

1.0.6

云端
Spring AI 学习者

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 替代手动字符串拼接过滤器表达式
  • 整合 SearchRequestDocument 的 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 的完全兼容性。