最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

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

关注

评论

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

深入理解MVCC与间隙锁

林一

MySQL MVCC

关于价值、目标、任务的思考

L3C老司机

优雅编码 | 18个Javascript代码的小技巧

devpoint

代码优化 优雅

一文带你读懂:设计模式的六大原则

后台技术汇

28天写作

企业是如何选择技术栈来做离线数仓

大数据老哥

自动泊车初步了解 (28天写作 Day17/28)

mtfelix

自动驾驶 28天写作 自动泊车

第4周课后练习-系统架构

潘涛

架构师训练营 4 期

架构师训练营 4 期 第4周

引花眠

架构师训练营 4 期

高效学习:如何学得更快更好

石云升

学习 28天写作

五分钟学会模板模式

田维常

mybatis

「产品经理训练营」作业02:利益相关方识别

狷介

产品经理训练营

「产品经理训练营」第二章作业

Sòrγy_じò ぴé

产品经理训练营 极客大学产品经理训练营 产品训练营

产品 0 期 - 第二周作业

Jxin

能源革命背后的牛公司 (28天写作 Day16/28)

mtfelix

28天写作 能源革命

人民日报——大力发展数字经济

CECBC

数字经济

JavaScript06 - 操作符

Mr.Cactus

JavaScript

Dockerfile ENV 使用指南

K8sCat

Docker Dockerfile ENV ARG

老师讲的真棒!2021Android精选面试实战总结整理,分享PDF高清版

欢喜学安卓

android 程序员 面试 移动开发

CSS(二)——CSS核心基础

程序员的时光

CSS 程序员 七日更 28天写作

泪目!为什么Flutter能最好地改变移动开发?成功收获美团,小米安卓offer

欢喜学安卓

android 程序员 面试 移动开发

重学JS | ES6既有Set,为啥还要有Weak Set?

梁龙先森

JavaScript 大前端 编程语言 28天写作

算法:匹配有效的括号,Swift 5中UITest从入门到精通, Swift 5 Viper Template,极客大学产品经理训练营 产品思维和产品意识, John 易筋 ARTS 打卡 Week 36

John(易筋)

ARTS 打卡计划 极客大学产品经理训练营 Swift 5 UITest Swift 5 Viper Template

第4周总结-系统架构

潘涛

架构师训练营 4 期

商务部CECBC区块链专委会副主任、数字经济商学院院长吴桐:建立完善稳健的基础设施 加速区块链与产业深度融合

CECBC

区块链

「架构师训练营 4 期」 第四周 - 002

凯迪

Nginx架构赏析

旺旺

nginx 架构 中间件

Scrum Patterns:Sprint计划会(译)

Bruce Talk

敏捷 译文 Agile Scrum Patterns

认识产品经理

ALone

“区块链+产业应用”系列研讨会首场“大健康产业篇”在深圳举行

CECBC

健康产业

Python 中 lru_cache 的使用和实现

zikcheng

Python 源码分析 LRU

C++静态链接符号冲突的几种处理方法

ElvinYang

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