fastjson 2.0.63 版本现已发布,本版本为安全修复版本,加固了 AutoType 反序列化校验,并修复了多个可由构造输入触发的解析健壮性问题(OOM / DoS)。强烈建议所有用户升级,尤其是解析不可信 JSON 或 JSONB 数据的应用。
暂时无法升级的用户,可通过 -Dfastjson2.parser.safeMode=true 缓解 AutoType 问题(适用于未使用自定义 AutoTypeBeforeHandler 的应用)。
fastjson 1.x 用户:同款 AutoType 加固已在 fastjson 1.2.84 中提供。
安全修复
- 加强 AutoType 类型名校验与白名单验证:包含 URL 特殊字符的类型名在到达类加载器之前即被拒绝;白名单 hash 命中后增加文本回验,仅 hash 碰撞无法再绕过白名单;accept 前缀不再覆盖
ClassLoader/DataSource/RowSet 等危险基类——只有完整类名的 accept 条目才视为显式放行 #7703
- 限制数字字面量位数,防止构造的超长数字触发
BigInteger O(n²) DoS #7668 #7694
- 修复 JSONB
BC_BIGINT 声明长度 OOM(构造超大长度声明的 payload)#7669 #7696
- 修复 JSONB
BC_BINARY 声明长度 OOM #7669 #7705
变更与问题修复
- 修复
Collection 元素(如 HashSet)缺少引用检测的问题,开启 ReferenceDetection 时重复元素现在正确序列化为 $ref #7678 #7701
- 修复
getObjectWriterInternal switch 分支中创建的 ObjectWriter 未缓存导致的 Metaspace 泄漏 #7626 #7627
- 性能修复:将
getInt/setInt 移出 lambda,避免每次调用自旋 #7677 #7693
- 支持 JSONCompiled records #7665
- 缺少 kotlin-reflect 导致 Kotlin 类字段值丢失时增加警告日志 #7675
Maven 依赖配置
标准版本
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.63</version>
</dependency>
Android 5 优化版本
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.63.android5</version>
</dependency>
Android 8 优化版本
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.63.android8</version>
</dependency>
更新说明:https://github.com/alibaba/fastjson2/releases/tag/2.0.63