免费注册!6月19-20日,「亚马逊云科技中国峰会」重磅来袭! 了解详情
写点什么

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

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

关注

评论

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

区块链与智能革命的未来

CECBC

【Flutter 专题】29 图解自定义底部状态栏 ACEBottomNavigationBar (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月月更

安全稳定便捷! 融云赋能“轻云会议”满足政府在线会议需求

融云 RongCloud

云计算 音视频 通信 会议 视频云

千万级学生管理系统的考试试卷存储方案

刘琦Logan

Vue进阶(幺叁陆):el-steps 实现页面内导航

No Silver Bullet

Vue 10月月更

构建数字合作格局 赋能政企行业通信——首届WECC 2021即将召开

融云 RongCloud

音视频 IT, 通信 通信云 会议

详解物联网Modbus通讯协议

华为云开发者联盟

物联网 通信 Modbus 通讯协议 TCP通信

架构实战营 - 模块五作业

Alex.Wu

架构实战营模块5课后作业

apple

Mock Service Worker:可用于浏览器的Mock服务

devpoint

Vue Mock msw 10月月更

【Android构建新工具】Bazel构建工具介绍

轻口味

android 构建工具 10月月更

为何实现碳中和已刻不容缓?

CECBC

CSS架构之Acss层

Augus

CSS 10月月更

Leetcode 题目解析:287. 寻找重复数

程序员架构进阶

算法 LeetCode 10月月更

绿色电力交易是一场迫在眉睫,区块链记录每一笔绿色电力交易

CECBC

架构实战营_模块六作业_拆分电商系统为微服务

Rabbit

Elasticsearch 分片速度、进度及故障排查(qbit)

qbit

elasticsearch shard

写给初学者,一文搞懂大数据学习、岗位、面试及简历

五分钟学大数据

大数据

Go 中 Nil 理论上有类型,实践中无类型

baiyutang

golang 10月月更

链路层的封装成帧和透明传输基本问题

Regan Yue

计算机网络 10月月更

linux之sudo使用技巧汇总

入门小站

Linux

【LeetCode】 山峰数组的顶部Java题解

Albert

算法 LeetCode 10月月更

在Vue中使用JSX,很easy的

华为云开发者联盟

JavaScript Vue Vue3 JSX 渲染函数

在线最大公因数计算器

入门小站

工具

【Vuex 源码学习】第十三篇 - Vuex 辅助函数的实现

Brave

源码 vuex 10月月更

微博评论高性能高可用计算架构

刘琦Logan

每个数据工程师都应该知道的 6 个 SQL 查询

云原生

sql 职业生涯 数据工程师

016云原生之安全技术

穿过生命散发芬芳

云原生 10月月更

字节、快手、阿里、腾讯这两年的广告推荐技术进展

博文视点Broadview

架构实战营 - 模块五作业

en

#架构实战营

听首歌的时间,简单复习下 python 网络编程之 socket,美不美?滚雪球学python第4季14篇

梦想橡皮擦

10月月更

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