写点什么

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

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

关注

评论

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

MySQL Shell 使用指南

Simon

MySQL mysqlshell

怎么画ER关系图?这个在线ER图软件值得推荐!

彭宏豪95

职场 ER图 在线白板 办公软件 绘图软件

更懂外贸老板的智能客服,XTransfer上线智能小秋2.0

XTransfer技术

AI 智能客服

这是我的新名片,望您惠存!

通明湖

刷新方盒子最快10万销量纪录 捷途旅行者何以颠覆越野市场?

极客天地

从数据到决策:拼多多商品详情API在市场分析中的应用

Noah

云主机(操作系统:CentOS7版本)安装nfs客户端,挂载文件系统

天翼云开发者社区

云计算 操作系统 云主机

Jenkins源代码管理+接入钉钉api发送接口自动化测试报告

测试人

软件测试 jenkins

浅谈Redis的三种集群策略及应用场景

天翼云开发者社区

集群 redis 底层原理

欧特克汽车创新论坛:一汽大众和东研智慧展示最新数字化方案

E科讯

高德面试:为什么Map不能插入null?

王磊

Java

YashanDB携手宏杉科技助力国产软件生态发展

极客天地

大模型在推荐系统中的精准推荐策略与实践

京东科技开发者

手把手教你用Spring Boot搭建AI原生应用

百度Geek说

企业号 6 月 PK 榜 AI原生应用 Spring AI

大模型应用之基于Langchain的测试用例生成

京东科技开发者

linux各个目录的作用

天翼云开发者社区

Linux 目录

jenkins源代码管理+接入钉钉api发送接口自动化测试报告

测吧(北京)科技有限公司

测试

基于SkyEye运行Qt:著名应用程序开发框架

DevOps和数字孪生

qt SkyEye

让存储绿“翼”盎然,天翼云HBlock入选工信部目录!

天翼云开发者社区

云计算 存储 天翼云 中国电信

国云注智,聚力向新!天翼云打造五位一体智算云能力体系!

天翼云开发者社区

云计算 算力 数字中国 云生态大会

Junit4遇上chatGPT

京东科技开发者

网络安全等级保护测评师定义以及主要工作任务是什么?

行云管家

网络安全 等保测评师

数字先锋| “药”上云!天翼云助力国药数科加速建设“国药云”

天翼云开发者社区

云计算 架构 云生态大会

大数据与人工智能初了解

天翼云开发者社区

人工智能 大数据

搭建高可用k8s

不在线第一只蜗牛

Kubernetes 容器化 Linux 运维

云行| 龙云展翼 智绘未来,天翼云助力黑龙江打造数智产业新高地!

天翼云开发者社区

人工智能 云计算

网络安全专用产品销售许可证查询的几种方式你知道吗?

行云管家

网络安全 堡垒机 销售许可证

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