Java 的序列化特性将要退出历史舞台了

  • Alice

2018 年 5 月 28 日

话题:JavaOracle语言 & 开发架构

甲骨文公司正计划将安全方面的一大棘手难题对象序列化功能从 Java 当中剔除出去。这项功能亦被称为 Java 对象序列化,主要用于将对象编码为字节流形式。除了用于轻量化持久性与通过套接字或 Java RMI 进行通信之外,序列化功能还支持从字节流中重构对象图。

甲骨文公司 Java 平台部门首席架构师 Mark Reinhold 表示,去除序列化机制是一项长期目标,亦是其专注于面向 Java 语言功能生产力强化目标的 Amber 项目的重要组成部分。

为了替换现有序列化技术,甲骨文方面将在相关记录(即 Java 版本的数据类)获得支持之后,向 Java 平台中添加一套小型序列化框架。该框架能够支持记录图,而开发人员亦可接入自己选择的序列化引擎、支持 JSON 或 XML 等格式,并以安全方式实现记录序列化功能。不过 Reinhold 目前还无法确定记录功能将正式登陆 Java 的哪个版本。

根据 Reinhold 的说法,序列化功能堪称诞生于 1997 年的一个“可怕错误”。他估计,至少有三分之一甚至是半数 Java 安全漏洞都与序列化机制有关。序列化总体而言存在巨大安全风险,但 Reinhold 表示其在简单用例当中的出色易用性仍具有一定吸引力。

最近,Java 刚刚迎来了过滤功能,因此如果开发者必须在网络之上使用序列化功能且愿意接受不可信序列化数据流,则可借此选择需要过滤掉的类以实现针对序列化安全弱点的防御机制。Reinhold 指出,甲骨文公司目前收到大量运行在网络之上的应用服务器的报告,并发现其中相当一部分在未受保护的端口上使用序列化流。正是为了解决这一问题,过滤功能才应运而生。

最后,推荐一个极客时间最新上线的专栏,用讲故事的方式帮你学习和理解网络协议。

JavaOracle语言 & 开发架构