50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

从 Java 9 反向移植对象反序列化过滤器

  • 2017-03-30
  • 本文字数:956 字

    阅读完需:约 3 分钟

JEP 290 让开发人员可以在反序列化对象时对传入数据进行过滤。该提案最初是针对 Java 9 提出的,但现在已经反向移植到Java 6、7、8 。该特性提供了一种机制,可以在处理对象输入流时过滤传入数据,并且可以帮助预防反序列化漏洞。前不久,这种漏洞曾影响了Apache Commons 及其他库。

反序列化不可信任数据是开放Web 应用安全项目(OWASP)和 CERT Oracle Coding Standard for Java (尤其是规则 SER12-J SER13-J )等所列出的一个众所周知的风险。软件开发人员应该总是检查通过ObjectInputStream传入的数据是否有效,不过,借助 JDK 中现有的工具,这有时候并不容易实现。JEP 290 改变了这种情况,它提供了一种方法过滤传入数据,而且不需要扩展ObjectInputStream。这是通过多种机制实现的,取决于相关开发人员的需要。

一般来说,开发人员可以通过编辑系统属性jdk.serialFilter或者conf/security/java.properties中的安全属性jdk.serialFilter配置默认的 ObjectInputFilter 。这些属性可以接受一种或多种模式,用于查找类(使用类似 Ant 文件模式的语法),或者设置对反序列化对象属性的限制:

复制代码
// 拒绝反序列化任何属于 untrustedmodule 的类,
// 以及任何元素数超过 500 的数组
jdk.serialFilter=!untrustedmodule/.**;maxarray=500
// 包 com.myorg.trusted 的白名单类,
// 但不一定是来自子包
jdk.serialFilter=com.myorg.trusted.*

如果需要更大的灵活性,那么开发人员可以指定自己的动作和检查,实现自己的 ObjectInputFilter ,然后使用 setObjectInputFilter 应用到已有的ObjectInputStreamObjectInputFilter可以使用 ObjectInputFilter.FilterInfo 提供的信息确定当前正在反序列化的对象是可以接受还是需要拒绝,或者该过滤器并没有提供足够的决策信息;在后一种情况下,自定义的过滤器可以将状态置为“不确定”,并委托另一个用户定义的过滤器或者默认的系统过滤器进行决策。

最后,如果开发人员希望在所有的反序列化过程中都使用自己的机制,就可以使用 ObjectInputFilter.Config.setSerialFilter 将一个用户定义的过滤器指定为系统默认的过滤器。

如本文开头所言,开发人员不需要等到 Java 9 才开始应用序列化过滤器;Java 8 update 121、Java 7 update 131、Java 6 update 141 均提供了 JEP 290。

查看英文原文 Object Deserialisation Filters Backported from Java 9

2017-03-30 19:002858
用户头像

发布了 1008 篇内容, 共 437.7 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

浅谈如何实现自定义的 iterator 之二

hedzr

c++ stl Iterator 迭代器

6 种事件驱动的架构模式,springboot入门书籍

Java 程序员 后端

avatar Logo,nginx负载均衡算法及原理

Java 程序员 后端

CentOS部署Harbor镜像仓库,java进阶训练营百度网盘

Java 程序员 后端

client-go实战之一:准备工作,干货分享

Java 程序员 后端

21道Java基础面试题及答案(1),linux系统管理技术手册

Java 程序员 后端

95% 的算法都是基于这 6 种算法思想,大厂Java面试必考点

Java 程序员 后端

Alibaba内部流行的“Java突击宝典”,springboot模块化架构

Java 程序员 后端

apollo在Spring boot加载过程解析,redis单线程原理

Java 程序员 后端

CDH+Kylin三部曲之二:部署和设置,java项目百度网盘

Java 程序员 后端

7年Java开发经验,面试20多家公司,砍下16个Offer

Java 程序员 后端

985应届进大厂,后端开发两年被裁,对前路迷茫的我

Java 程序员 后端

28天读完349页,这份Alibaba面试通关手册,助我

Java 程序员 后端

30张图带你分析:spring事务源码,mysql基础教程视频

Java 程序员 后端

5种可能在10年后消失的开发语言,java消息队列面试题

Java 程序员 后端

6月GitHub上最牛逼的10个Java开源项目,号称“Star收割机

Java 程序员 后端

as-if-serial规则和happens-before规则的区别

Java 程序员 后端

CAS都不了解,你还怎么看J-U-C,下载量瞬秒百万

Java 程序员 后端

30岁程序员裸辞,闭关三月,拿下阿里字节百度等12家offer

Java 程序员 后端

6年拉力工作经验,学了阿里P8级架构师的7+1,java基础学习百度云

Java 程序员 后端

Binder源码阅读指南之java层,Java程序员如何有效提升学习效率

Java 程序员 后端

4个实验,彻底搞懂TCP连接的断开,实战nginx张宴

Java 程序员 后端

90行代码,15个元素实现无限滚动,吃透这份Java高级工程师面试497题解析

Java 程序员 后端

97 道大厂 Java 核心面试题出炉,来试试看你会几道题?

Java 程序员 后端

apiserver源码分析——启动流程,java工程师技术栈

Java 程序员 后端

BAT大厂Java面试必备:20道最新JVM面试题(含答案

Java 程序员 后端

MacBook M1 搭建OpenVINO环境

IT蜗壳-Tango

OpenVINO MacBook M1 10月月更

架构实战营模块二作业

随风King

「架构实战营」

20年IT农民工终于分享出了SpringCloud微服务架构实战文档,太强了!

Java 程序员 后端

21道Java基础面试题及答案,Dubbo SPI及自适应扩展原理

Java 程序员 后端

4年Java开发经验,从传统公司裸辞之后足足准备了3个月,终于拿到美团

Java 程序员 后端

从Java 9反向移植对象反序列化过滤器_Java_Abraham Marín Pérez_InfoQ精选文章