写点什么

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

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

关注

评论

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

Java HashMap 的那么多为什么

多选参数

Java Java源码

如何帮助技术员工高效成长?这几家企业的做法值得借鉴

极客时间企业版

研发管理 研发团队培训

小白如何学习操作系统?

苹果看辽宁体育

操作系统

架构师训练营week06 学习总结

GunShotPanda

猿灯塔:spring Boot Starter开发及源码刨析(七)

猿灯塔

探索无限潜能,英特尔神经拟态计算除了有“嗅觉”还能有“触觉”

最新动态

如何做一次完美的 ABTest?

vivo互联网技术

数据分析 AB testing实战

简单的了解一下K8S,并搭建自己的集群

leonsh

Kubernetes 微服务

GitHub Actions和mp-ci助力微信小程序持续集成

neo

微信小程序 taro GitHub CI/CD

有趣的条漫版 HashMap,25岁大爷都能看懂

古时的风筝

hashmap

计算机网络基础(四)---网络层-ARP协议与RARP协议

书旅

laravel 计算机网络 网络协议 计算机基础 网络层

linux上强大的字符串匹配工具详解-grep

X先生

Shell grep

我从LongAdder中窥探到了高并发的秘籍,上面只写了两个字...

why技术

jdk 高并发 LongAdder

API接口管理平台YAPI的搭建

Man

DevOps APi设计 YAPI

变性手术后,产品总监和当当网打起了官司

赵新龙

法律 判决书 案例

技术科普丨服务发现和负载均衡的来龙去脉

华为云开发者联盟

负载均衡 微服务 开发者工具 服务端 服务

知乎,挣钱?果然有长尾效应

非著名程序员

程序员 副业 副业赚钱 知乎 好物推荐

腾讯面了五轮,面委挂了,挂的原因让大家唏嘘...

程序员生活志

腾讯 面试

[架构师训练营] Week03 - 学习总结

谭方敏

第六期作业

GAC·DU

优傲机器人以人机协作助力中国“智能制造”落地

Geek_116789

架构师训练营week06 作业

GunShotPanda

有了“质量墙”,程序员再也没有秃头的烦恼

华为云开发者联盟

程序员 软件 代码审查 项目 代码

信创舆情一线--十五部门印发指导意见进一步促进服务型制造发展

统小信uos

解决方案|智能消防预警系统突破高层楼房限制

华为云开发者联盟

AI 物联网 边缘计算 华为云

重读vue2.0风格指南,我整理了这些关键规则

前端有的玩

Java Vue 代码规范

前端杂记-回调地狱

阡陌r

JavaScript 回调地狱

数据分析师完整的指标体系构建 (干货)

博文视点Broadview

数据挖掘 读书笔记 数据分析 数据 求职

一文快速掌握华为云IPv6基础知识及使用指南

华为云开发者联盟

物联网中台 物联网 网络 华为云

Java8——Stream流

Java旅途

第六期总结

GAC·DU

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