写点什么

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

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

关注

评论

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

在线文本对比工具

入门小站

工具

大厂算法面试之leetcode精讲7.双指针

全栈潇晨

LeetCode 算法面试

Android C++系列:Linux信号(一)

轻口味

c++ android jni 11月日更

TMF国际大奖技术揭秘:5G智能动态步长

鲸品堂

5G 计费模式 通信运营商

区块链将掀开人类的伟大时代

CECBC

Linux 中的 15 个强大的 firewall-cmd 命令,牛牛牛!

Ethereal

Linux 运维 防火墙 Firewalld防火墙

路由器或交换机配置中line vty 0 4到底是什么意思?

Ethereal

交换机 路由器 网络技术

人脸检测实战进阶:使用 OpenCV 进行活体检测

AI浩

Flutter 异常监控、符号解析及聚合分流实践

贝壳大前端技术团队

flutter 监控 异常 符号化

“元宇宙”究竟是什么

华为云开发者联盟

云计算 AI AR vr 云宇宙

Pulsar 在2.8升级过程中需要注意的TopicPolicy问题

Zike Yang

Apache Pulsar 11月日更

.NET6新东西--插值字符串优化

喵叔

11月日更

听说版本会说话,你相信吗?

程序那些事

版本控制 程序那些事 版本管理 版本升级 11月日更

坐标东京,诚招IT工程师~

马农驾驾驾

软件 软件开发 日本 IT 日语

Webpack 性能之使用 Cache 提升构建性能

编程江湖

大前端 webpack

Java中对象的初始化生成过程

编程江湖

Java JAVA开发 java编程

还有人不知道鸿蒙智联设备认证咋搞?|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

linux重要的目录之etc

入门小站

Linux

Prometheus Exporter (十一)Kafka Exporter

耳东@Erdong

kafka Prometheus exporter 11月日更

历史上最伟大的一次 Git 代码提交

沉默王二

git

使用MRS CDL实现实时数据同步的极致性能

华为云开发者联盟

延迟 实时数据 MRS CDL 吞吐 实时数据复制

Hadoop、Spark、Hive到底是什么,做算法要不要学?

编程江湖

大数据

Java开发之集成开发环境

@零度

JAVA开发 Java学习 IED

不是吧,都2021年了你别说你还不会Spring MVC基本应用

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

对元宇宙 我们期待什么?

CECBC

spark2.0笔记

Clarke

HBase 调优详细剖析

五分钟学大数据

11月日更

数字人民币的基础:共识与信任!

CECBC

【死磕Java并发】-----J.U.C之重入锁:ReentrantLock

chenssy

11月日更 死磕 Java 死磕 Java 并发

什么是IS-IS中间系统到中间系统?网工、运维必看!

Ethereal

网络技术

Flutter - TabController监听index

坚果

flutter 11月日更

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