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();
    }
}
相关推荐
用户962377954481 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机1 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机1 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954481 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star1 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954481 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
YuMiao1 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
cipher3 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
Jony_4 天前
高可用移动网络连接
网络协议
chilix4 天前
Linux 跨网段路由转发配置
网络协议