写点什么

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

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

关注

评论

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

快手重点整治搬运、洗稿等方式的养号行为,自媒体平台如何净化内容生态

石头IT视角

基于java springboot失物招领微信小程序源码

清风

计算机毕业设计 失物招领小程序

基于对象的实时空间音频渲染丨Dev for Dev 专栏

RTE开发者社区

Dev for Dev 空间音频 实时互动

leetcode 763. Partition Labels 划分字母区间(中等)

okokabcd

LeetCode 数据结构与算法 贪心算法

openEuler Embedded SIG | 分布式软总线

openEuler

开源 分布式 操作系统 嵌入式 openEuler

React Refs 笔记📝

程序员海军

React 7月月更

PLATO上线LAAS协议Elephant Swap,用户可借此获得溢价收益

鳄鱼视界

融合数据库生态:利用 EventBridge 构建 CDC 应用

阿里巴巴云原生

阿里云 云原生 事件总线 CDC EventBridge

被忽视的智能电视小程序领域

Geek_99967b

物联网

研发效能的道法术器

laofo

DevOps cicd 研发效能 基础设施 持续交付

requestVideoFrameCallback() 简单实例

devpoint

3D 视频处理 7月月更

SpringBoot基于异常处理exception发送邮件消息提醒

宁在春

springboot 7月月更

Bootstrap Affix和过渡效果插件的详细使用【前端Bootstrap框架】

恒山其若陋兮

7月月更

DDD领域驱动设计如何进行工程化落地

慕枫技术笔记

DDD 架构设计 7月月更

字符设备驱动结构

贾献华

7月月更

Baklib|为什么说企业需要重视客户体验?

Baklib

深开鸿:万物智联的大江上,升起一轮开源鸿蒙月

脑极体

【周周有奖】云原生编程挑战赛“边缘容器”赛道邀你来战!

阿里巴巴云原生

阿里云 边缘容器 云原生编程挑战赛

编码用这16个命名规则能让你少写一半以上的注释!

岛上码农

flutter ios 前端 安卓开发 签约计划第三季

智能电视与小程序的结合

Geek_99967b

物联网

为什么客户支持对SaaS公司很重要?

Geek_da0866

上海交大牵手淘宝成立媒体计算实验室:推动视频超分等关键技术发展

阿里巴巴大淘宝技术

音视频 音视频技术

怎样搭建企业内部维基百科

Baklib

什么是低代码?哪些平台适合业务人员?用来开发系统靠不靠谱?

优秀

低代码 低代码平台

学习Typescript(二)

bo

前端 ts 7月月更

英特尔数据中心GPU正式发货,以开放灵活提供强劲算力

科技新消息

一文读懂Okaleido Tiger近期动态,挖掘背后价值与潜力

小哈区块

Prometheus 的 API 稳定性保障

耳东@Erdong

Prometheus API 7月月更

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