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();
    }
}
相关推荐
oMcLin5 小时前
Ubuntu 22.04 无法连接外部网络的故障排查与解决(解决 DNS 配置问题)
linux·网络·ubuntu
weixin_462446236 小时前
exo + tinygrad:Linux 节点设备能力自动探测(NVIDIA / AMD / CPU 安全兜底)
linux·运维·python·安全
小李独爱秋7 小时前
计算机网络经典问题透视:常规密钥体制与公钥体制最主要的区别是什么?—— 一文带你从“钥匙”看懂现代密码学核心
服务器·网络·tcp/ip·计算机网络·密码学
千百元8 小时前
限制网段访问服务器端口63790
java·网络·mybatis
bst@微胖子8 小时前
Linux下排查网络偶现超时问题
linux·网络·dubbo
几道之旅8 小时前
websocket.WebSocketApp是全双工的吗?
网络·websocket·网络协议
OpenMiniServer8 小时前
JsonKV协议技术文档
linux·服务器·网络
2501_924064119 小时前
2025年APP隐私合规测试主流方法与工具深度对比
大数据·网络·人工智能
开开心心就好9 小时前
OCR识别工具可加AI接口,快捷键截图翻译便捷
java·网络·windows·随机森林·电脑·excel·推荐算法