fastjson (3修复)

一、核心修复:升级到安全版本(优先级最高)

fastjson 漏洞的根源是早期版本的设计缺陷,升级版本是最彻底、最有效的修复方式,优先推荐迁移到 2.x 系列(重构了核心逻辑,安全性大幅提升)。

1. 升级到 fastjson2(2.x 版本,推荐)

这是官方主推的安全版本,完全重构了反序列化逻辑,默认关闭自动类型检测,从根本上规避了核心漏洞。

  • Maven 依赖配置
java 复制代码
<!-- 移除旧的 1.x 依赖(关键:避免版本冲突) -->
<!-- <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency> -->

<!-- 添加 fastjson2 依赖(2025年最新稳定版) -->
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.50</version>
</dependency>

<!-- 可选:若项目中有大量 1.x 写法,可引入兼容包(减少代码修改) -->
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2-extension</artifactId>
    <version>2.0.50</version>
</dependency>
  • Gradle 依赖配置
Groovy 复制代码
// 移除旧依赖
// implementation 'com.alibaba:fastjson:1.2.47'

// 添加 fastjson2
implementation 'com.alibaba.fastjson2:fastjson2:2.0.50'
// 可选兼容包
implementation 'com.alibaba.fastjson2:fastjson2-extension:2.0.50'
2. 临时升级到 1.x 安全版本(无法迁移 2.x 时)

若项目因兼容性问题暂时无法升级到 2.x,可升级到 1.x 系列的最新安全版本(仅临时过渡,建议最终迁移到 2.x):

复制代码
<!-- 1.x 最新稳定版(2025年) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>
升级后验证

执行以下命令确认依赖已更新:

bash 复制代码
# Maven 验证
mvn dependency:tree | grep fastjson

# Gradle 验证
gradle dependencies | grep fastjson

输出应显示升级后的版本(如 2.0.50 或 1.2.83),无旧版本依赖。

二、临时防护:配置安全规则(无法立即升级时)

若暂时无法升级版本(如项目发布周期限制),可通过配置限制反序列化行为,阻断漏洞利用路径:

1. 核心安全配置(1.x 版本)
java 复制代码
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.JSON;

public class FastjsonSecurityConfig {
    // 项目启动时初始化(如 Spring 项目的 @PostConstruct 方法)
    public static void initFastjsonSecurity() {
        // 1. 关闭自动类型检测(核心:阻断漏洞利用的关键)
        ParserConfig globalConfig = ParserConfig.getGlobalInstance();
        globalConfig.setAutoTypeSupport(false);
        
        // 2. 配置反序列化白名单(仅允许指定包下的类反序列化)
        // 替换为你项目的实际包名,多个包可多次调用
        globalConfig.addAccept("com.youproject.model.");
        globalConfig.addAccept("com.youproject.dto.");
        
        // 3. 禁用高危类(补充防护,防止绕过)
        globalConfig.addDeny("com.sun.rowset.");
        globalConfig.addDeny("java.lang.");
        globalConfig.addDeny("org.apache.commons.");
        
        // 4. 可选:使用自定义 ParserConfig,避免全局配置被篡改
        ParserConfig customConfig = new ParserConfig();
        customConfig.setAutoTypeSupport(false);
        // 业务代码中使用自定义配置解析
        // JSON.parseObject(jsonStr, User.class, customConfig);
    }
}
2. Spring 项目集成示例

在 Spring 启动类中初始化安全配置:

java 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import javax.annotation.PostConstruct;

@SpringBootApplication
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }

    @PostConstruct
    public void init() {
        // 项目启动时加载 fastjson 安全配置
        FastjsonSecurityConfig.initFastjsonSecurity();
    }
}
相关推荐
威联通网络存储21 分钟前
某大型制造企业基于威联通 NAS 的海量数据存储与容灾归档实践
网络·nas
xingxin322 小时前
日志文件分析溯源(连接WebShell的IP地址)实验报告
安全·web安全·网络安全·php·文件上传
kang0x02 小时前
silent_peeper Writeup by AI
安全
二进制person4 小时前
JavaEE初阶 --网络编程
linux·服务器·网络
瀚高PG实验室4 小时前
易智瑞GeoScene Pro连接瀚高安全版数据库 458
数据库·安全·瀚高数据库
钛态4 小时前
Flutter 三方库 http_mock_adapter — 赋能鸿蒙应用开发的高效率网络接口 Mock 与自动化测试注入引擎(适配鸿蒙 HarmonyOS Next ohos)
android·网络协议·flutter·http·华为·中间件·harmonyos
Oll Correct4 小时前
实验八:验证以太网交换机的生成树协议STP
网络·笔记
Irissgwe4 小时前
进程间通信
linux·服务器·网络·c++·进程间通信
IT小白36 小时前
windows的VMware虚拟机上的Linux系统(CentOS)配置永久ip(关机重启ip不变)
网络·网络协议·tcp/ip
喵叔哟7 小时前
29_内容生产质量网关Skill:草稿生成+事实校验+发布前检查
网络·人工智能