写点什么

从 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:002786
用户头像

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

关注

评论

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

记录:28天拿到字节offer的全过程(Java岗)

Java架构师迁哥

应用架构步入“无服务器”时代,Serverless技术迎来新发展

华为云开发者联盟

Serverless 华为云 无服务器 可信云 FunctionGraph

不是我吹!看完阿里高工码出Java150K字面试宝典,进大厂稳了

Java 程序员 架构 面试

模块 4 作业

鲲哥

领域驱动设计101 - 值对象

luojiahu

领域驱动设计 DDD

IDEA中request获取不到getParameter方法

咿呀呀

javaWeb Request getParameter

🔎【Java 源码探索】深入浅出的分析ClassLoader

码界西柚

Java ClassLoader 类加载器 5月日更 双亲委托模型

接招吧!最强“高并发”系统设计 46 连问,分分钟秒杀一众面试者

面试 高并发 Java 25 周年

Hive|如何避免数据倾斜

数据社

hive 5月日更

Java岗熬了6年,终成P8,只因搞懂了这七件事

Java架构师迁哥

iOS打包签名,你真的懂吗

Geen练

ios 打包 签名 iOS Developer

架构实战营 - 模块 5- 作业

泄矢的呼啦圈

架构实战营

kube-controller-manager之AD Cotroller源码分析

良凯尔

Kubernetes 源码分析 Ceph CSI

Github上“Java面试考点大全”被我扒下来了,20+互联网公司,应有尽有

Java架构师迁哥

架构师实战营-模块4-设计千万级学生管理系统的考试试卷存储方案

吴建中

架构实战营

由云入端:一场云计算巨头的闯关游戏

脑极体

废物,我TMD一个985却斗不过专科生(大厂java开发2年被裁)

Java架构师迁哥

ubuntu64位搭建OpenVINO系统(上篇)

IT蜗壳-Tango

5月日更

第一次凡尔赛,字节跳动3面+腾讯6面一次过,谈谈我的大厂面经

Java架构师迁哥

喜讯!腾讯团队Redis技术笔记,下载量已突破30W;附下载方式

Java架构师迁哥

探索科技手段下的食品安全,区块链冷链追溯平台建设解决方案

源中瑞-龙先生

金三银四旗开得胜!春招字节正式批4面,顺利拿到offer

Java 程序员 架构 面试

Spring 是什么?如何去了解spring?

???

Java spring 程序员 编程语言 spring M

一篇文章弄清磁盘的里里外外及访问特性

SunnyZhang的IT世界

教你一招:让集群慢节点无处可藏

华为云开发者联盟

节点 GaussDB 集群 慢节点 慢实例

从外包辞职再到入职字节那天,我落泪了,没人知道我付出了多少

Java架构师迁哥

iOS开发-60分钟入门

iOSer

ios iOS Document 移动开发 ios开发 iOS Developer

解析如程688免费住民宿的商业模式

石云升

商业模式 5月日更

花5分钟手写一个简单的HashMap,搞定挑剔面试官

北游学Java

Java 面试 hashmap

Mysql InnoDB使用的锁

water

太顶了!阿里大牛离职带出来的这份“Java架构核心宝典”学习笔记,差距不是一点点

Java 程序员 架构 面试

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