写点什么

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

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

关注

评论

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

Zypher Network的服务器抽象叙事,引领GameFi 赛道下个热点

加密眼界

Zypher Research:服务器抽象叙事,GameFi 赛道的下一个热点?

石头财经

Zypher Network的服务器抽象叙事,引领GameFi 赛道下个热点

BlockChain先知

VMware Aria Automation 8.18 发布,新增功能概览

sysin

vmware automation aria

VMware ESXi 8.0U3 Dell (戴尔) 定制版更新 OEM BIOS 2.7 支持 Windows Server 2025

sysin

macos esxi OEM unlocker dell

高并发编程/一张图精通CompletableFuture整体执行流程与设计(高手篇)

肖哥弹架构

Java 并发编程 高并发

企业选择云桌面系统的主要原因是什么?

青椒云云电脑

云桌面 云桌面系统

加强科技平台企业赋能 加快发展新质生产力

不在线第一只蜗牛

低代码 数字化

ClkLog企业版(CDP)预售开启,更有鸿蒙SDK前来助力

ClkLog

开源 sdk HarmonyOS 用户画像

青椒云云桌面针对中小企业上云的服务怎么样?

青椒云云电脑

云桌面 云电脑 云桌面厂商

阿里云上的Salesforce这一年:深耕本地化,释放新价值

Alter

阿里云 CRM Salesforce

主流电商平台售后API接口代码【详细】

快递鸟

API 接口

RUM最佳实践:内网IP地址映射地图地理位置场景

观测云

RUM

为开源 AI 模型引入激励机制?解读加密 AI 协议 Sentient 的大模型代币化解决方案

TechubNews

云桌面解决方案-青椒云

青椒云云电脑

云桌面 云桌面厂家 云桌面解决方案

ETLCloud怎么样?深度解析其在数据管理中的表现

RestCloud

数据库 ETL 数据管理 数据集成

2024年10月文章一览

codists

编程人

Zypher Network的服务器抽象叙事,引领GameFi 赛道下个热点

股市老人

VMware ESXi 8.0U3 xFusion (超聚变) 定制版更新 OEM BIOS 2.7 支持 Windows Server 2025

sysin

macos esxi OEM Xfusion

确保数据安全!使用Spring Boot 实现强大的API输入验证

江南一点雨

一文彻底弄懂Java的IO操作

不在线第一只蜗牛

Java Python io

云电脑与远程控制软件的区别

青椒云云电脑

云桌面 云电脑 云桌面厂家

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