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();
    }
}
相关推荐
小张同学a.25 分钟前
LAMP架构2
linux·运维·网络·架构·负载均衡
Nuoyunjituan36 分钟前
IPv6单栈、智能体互联、安全合规全面升级——互联网“新底座”政策对企业意味着什么?
安全
9624561 小时前
跨域与私有网络访问限制排查实录
运维·服务器·网络
发量惊人的中年网工1 小时前
SD-WAN如何赋能工业物联网?打造工厂网络远程连接和数据传输新方案
运维·网络·分布式·物联网
Chengbei111 小时前
云存储桶漏洞检测工具OSS-2.0更新,全类型文件解析,存储桶遍历 + 敏感排查一站式完成渗透取证
网络·安全·web安全·网络安全·xss
乐维_lwops1 小时前
乐维社区“专家坐诊”第403期问答
运维·网络·监控系统·答疑·lerwee运维智能体
阿虎儿1 小时前
Linux 下为局域网 IP(如 192.168.1.100)打造不受浏览器警告的自签名 SSL/TLS 证书
linux·安全·https
2401_873479402 小时前
IPv6支持不足怎么办?用双栈兼容IP离线库实现平滑过渡
数据库·网络协议·tcp/ip·ip
小王C语言2 小时前
虚拟机开机过程中关机,再次开机没有分配 IP
linux·网络·tcp/ip
零零信安2 小时前
暗网监测技术实践(一):威胁源采集与反爬对抗——基于《暗网情报技术能力框架》的双生态视角
网络·数据泄露·零零信安