在博客文章“ 将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对象序列化规范 (JDK 10链接)
  • 串行过滤最佳实践 (JDK 10链接)
  • serialver工具 (JDK 10链接)

以前指向“ 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的本机序列化不是唯一有缺陷的序列化技术。”

其他参考

  • Java对象序列化规范
  • JDK 10:序列化过滤
  • 从Java中删除序列化是Oracle的“长期目标”
  • 序列化已死! 序列化万岁!
  • Java的新(有缺陷的)序列化过滤初探
  • Java反序列化的风险
  • 序列化不是Java的Heartbleed Bug
  • Java反序列化安全性常见问题解答
  • 幸存的Java反序列化启示录 (OWASP AppSecEU 2016)
  • CWE-502:不信任数据的反序列化

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

JDK 11:Java序列化的终结开始了吗?相关推荐

  1. java jdk 序列化_JDK 11:Java序列化的终结开始了吗?

    java jdk 序列化 在博客文章" 将Google的协议缓冲区与Java结合使用 "中,我引用了乔什·布洛赫(Josh Bloch)的第三版的有效Java ,他写道:" ...

  2. Java JDK 11:现在可以使用所有新功能

    为什么80%的码农都做不了架构师?>>>    删除了CORBA,Java EE和JavaFX支持,但添加了十几个主要新功能 目录 哪里可以下载JDK 11 Java 11 JDK中 ...

  3. krait和kryo_各种Java序列化性能比较

    并发主题 各种Java序列化性能比较 这里比较Java对象序列化 XML JSON Kryo POF等序列化性能比较. 很多人以为JDK的Java序列化肯定是将Java对象转换成二进制序列化最快的方式 ...

  4. Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)

    文章目录 前言 一.Kryo序列化(优先选择) 介绍 快速开始 测试 二.JDK原生序列化 介绍 快速开始 测试 三.Protobuf序列化 介绍 快速开始 测试 四.ProtoStuff 介绍 快速 ...

  5. java11模块化开发_【JDK 11】关于 Java 模块系统,看这一篇就够了

    继 2014 年 3 月 Java 8 发布之后,时隔 4 年,2018 年 9 月,Java 11 如期发布,其间间隔了 Java 9 和 Java 10 两个非LTS(Long Term Supp ...

  6. java jdk设置字符集_使用JDK 11在Java字符串上的新方法

    java jdk设置字符集 Java的String类似乎将在JDK 11中获得一些新方法,该方法将于2018年9月发布. 错误号 错误标题 新的String方法 描述 JDK-8200425 字符串: ...

  7. JDK 11:轻松取出单文件Java源代码程序

    JDK 11 Early Access Builds包含与JEP 330相关的预览功能("启动单个文件源代码程序"). 我之前在" Shebang即将来到Java? &q ...

  8. 使用JDK 11在Java字符串上的新方法

    Java的String类似乎将在JDK 11中获得一些新方法,该方法将于2018年9月发布. 错误号 错误标题 新的String方法 描述 JDK-8200425 字符串::行 lines() &qu ...

  9. Java 答疑:JDK 11(Java 11)之后没有 JRE 目录,环境用户变量配置的解决方法

    文章目录 前言 一.JDK 11(Java 11)之后 JRE 说明 二.选择自己需要的 JDK 版本 三.对下载的 JDK 进行解压 四.执行 Dos 命令生成 JRE 总结 前言 我们之前的 JD ...

最新文章

  1. 在Cuda上部署量化模型
  2. HttpServletResponse 的 sendError( )方法以及常用的HttpServletResponse常量级错误代码
  3. Java中传值与传地址
  4. MySQL排序查询介绍
  5. Linux 命令之 tcpdump -- 监听网络流量
  6. [Tarjan] 洛谷 P1726 上白泽慧音
  7. 采用Docker集成jquery-file-upload组件到WEB应用
  8. 02_HBase集群部署
  9. tomcat 调优-生产环境必备
  10. hplus--H+ V2.3 (中文版)
  11. 【乌拉喵.教程】TestBench仿真给输出脚赋值引起的问题
  12. 微软商店错误代码: 0x80131500解决方案
  13. 模板类和友元的总结和实例验证
  14. 金融产品经理的新方向:供应链金融
  15. 关于荣耀che1-cl20手机制作服务器失败的事
  16. 使用JQuery快速高效制作网页交互特效第九章所有上机
  17. 手机软键盘弹起导致页面变形的一种解决方案
  18. 多行溢出隐藏的解决办法
  19. Error 1962:No operating system found. Boot sequence will automatically repeat.--解决办法
  20. 故障插入测试技术研究

热门文章

  1. hihocoder1147 时空阵(bfs树+DP)
  2. 动态规划训练9 [Brackets POJ - 2955 ]
  3. SpringBoot2.1.9 多Kafka消费者配置
  4. Java 正则表达式匹配模式[贪婪型、勉强型、占有型]
  5. EL调用java方法
  6. 07-MyBatis 核心配置文件
  7. selenium以及chromdrive安装
  8. asp.net中条件查询+分页
  9. 2017蓝桥杯省赛---java---A---7(正则问题)
  10. 基本类型和字符串互相转换