温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java序列化安全吗

发布时间:2026-10-05 03:08:27 来源:亿速云 阅读:86 作者:小樊 栏目:编程语言

简短结论:Java 原生序列化(Java Serialization,Serializable + ObjectInputStream/ObjectOutputStream)默认并不安全,在生产环境中通常被认为是不安全的,应避免用于不可信数据。

下面分点说明。


一、为什么 Java 序列化不安全?

1. 反序列化可执行代码(最核心风险)

Java 反序列化时:

  • 会自动调用对象的 readObject、readResolve、readObjectNoData 等方法
  • 会触发 hashCode、equals、finalize 等方法的间接调用

如果攻击者构造恶意的序列化字节流:

  • 可借助 Gadget Chain(利用链)
  • 在反序列化过程中执行任意代码(RCE)

典型例子:

  • Apache Commons Collections 反序列化漏洞(2015)
  • 各类中间件、框架的历史 RCE 漏洞

只要能控制输入字节流,就可能被攻击


2. 攻击面极大

只要系统满足:

  • 接收外部序列化数据(网络、文件、缓存、消息队列)
  • 使用 ObjectInputStream 反序列化

就存在风险,即使你“没写危险代码”。


3. 兼容性差、设计缺陷

  • 序列化格式是 Java 私有的
  • 跨语言几乎不可用
  • 类结构变更极易导致兼容问题
  • 无法精细控制字段暴露

4. 默认无安全校验

ObjectInputStream:

  • 不验证数据来源
  • 不限制类类型
  • 没有内置白名单机制(需要手动扩展)

二、哪些场景风险最高?

❌ 不安全或高风险:

  • 接收外部/用户传入的序列化对象
  • RPC / 远程调用使用 Java 原生序列化
  • 把对象直接存到公共缓存(Redis 等)
  • 从文件、网络读取未知来源的 .ser

✅ 相对可控但仍需谨慎:

  • 仅在同一 JVM、可信内部服务之间
  • 类结构完全自己控制
  • 不会对外暴露

三、如何安全地使用(如果必须用)

1. 使用白名单(强烈推荐)

重写 ObjectInputStream:

class SafeObjectInputStream extends ObjectInputStream {
    private static final Set<String> ALLOWED = Set.of(
        "com.xxx.dto.User",
        "java.util.ArrayList"
    );

    @Override
    protected Class<?> resolveClass(ObjectStreamClass desc)
            throws IOException, ClassNotFoundException {
        if (!ALLOWED.contains(desc.getName())) {
            throw new InvalidClassException("Unauthorized", desc.getName());
        }
        return super.resolveClass(desc);
    }
}

2. 避免暴露反序列化入口

  • 不在公网接口使用
  • 不在通用协议中使用

3. 及时升级依赖

很多漏洞来自:

  • commons-collections
  • groovy
  • fastjson(非原生但相关)

四、更安全的替代方案(推荐)

✅ 不要用 Java 原生序列化

推荐:

  • JSON(Jackson / Gson)
  • Protocol Buffers
  • MessagePack
  • Avro / Thrift

优点:

  • 数据结构明确
  • 无自动代码执行
  • 跨语言
  • 易审计

五、总结一句话

Java 原生序列化“能跑”,但“不安全”;在不可信数据面前,它几乎是定时炸弹。

如果你愿意,我可以:

  • 帮你判断某个具体场景是否安全
  • 给你一个安全的序列化/反序列化方案示例
  • 对比 Java 序列化 vs JSON / Protobuf

只要告诉我你的使用场景即可。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手