JDK 11:Java序列化的终结开始了吗?

在博客文章“ 将Google的协议缓冲区与Java结合使用 ”中,我引用了乔什·布洛赫(Josh Bloch)的第三版有效Java ,他写道:“没有理由在您编写的任何新系统中使用Java序列化。” Bloch建议使用“跨平台结构化数据表示形式”,而不是Java的反序列化。

拟议的JDK 11 API文档将包含有关使用Java反序列化的更强有力的声明, 本文将对此进行简要介绍。

Java SE 11(18.9)JSR 384 )”规范的第二稿包括一个称为“ API Specification Differences”的“ A2附件”,其中包括对基于Javadoc的java.io软件包的更改。 新的java.io软件包文档将包含以下高级警告注释:

警告:不信任数据的反序列化本质上是危险的,应避免。 应根据Java SE安全编码指南中的“ 序列化和反序列化 ”部分,仔细验证不可信数据。

在撰写本文时,所引用的Java SE安全编码准则指出其当前为6.0版,并且已“针对Java SE 9更新”。

JDK 11中软件包java.io的预期软件包级文档还将提供指向以下其他参考的链接(但可能是基于JDK 11的参考):

以前指向“ Java Object Serialization ”(JDK 8)文档的参考链接将从java.io的软件包文档中删除。

除了将在JDK 11中更新的与Java反序列化的危险有关的java.io软件包文档之外, java.io.Serializable接口的Javadoc注释也收到了类似的高级警告消息。

鉴于过去几年中有关Java序列化和反序列化的各种声明,对JDK 11中基于Javadoc文档的这些更改不足为奇。 “ RFR 8197595:序列化javadoc应该链接到安全性最佳实践 ”,特别说明了添加此文档的必要性。 最近的InfoWorld文章名为“ Oracle计划转储有风险的Java序列化 ”和ADT杂志上的文章“ 从Java删除序列化是Oracle的长期目标” ”引用了Mark Reinhold在Devoxx UK 2018上的声明, 即向 Java添加序列化是“ 1997年的可怕错误”。

之前曾有讨论删除Java序列化。 JEP 154:创建删除序列化的目的是“弃用,禁用并最终删除Java SE Platform的序列化工具。” 但是,JEP的状态现在为“已关闭/已撤回”。 不过,随着有关删除Java序列化的讨论越来越多,为所有新系统考虑Java序列化的替代方法似乎是审慎的做法,这正是Bloch在Effective Java 第三版中的建议 。 所有这些,Apostolos Giannakidis在博客文章“ 序列化已死! 序列化万岁! ”表示“反序列化漏洞不会消失”,因为“ Java的本机序列化不是唯一有缺陷的序列化技术。”

其他参考

翻译自: https://www.javacodegeeks.com/2018/06/beginning-end-java-serialization.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值