写点什么

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

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

关注

评论

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

观测云:多云监控的高效解决方案

可观测技术

小智常见报表示例--层次坐标--逐层平均值报表

小智数据

类excel报表 自定义报表控件 报表批量打印 小智开源报表

小智常见报表示例--层次坐标--循环引用报表

小智数据

报表批量打印 自定义打印控件 小智开源报表

碳课堂|什么是碳标签?产品为什么要贴上“碳标签”?

AMT企源

数字化转型 双碳 碳管理 碳标签

安全与便捷并行,打造高效易用的用户支付体验

HarmonyOS SDK

HarmonyOS

AI 应用实战营 - 作业 五 - SD WebUI

德拉古蒂洛维奇

从基础到高级应用,详解用Python实现容器化和微服务架构

华为云开发者联盟

Python Docker 微服务 华为云开发者联盟 企业号2024年7月PK榜

小智常见报表示例--层次坐标--分组排名报表

小智数据

报表批量打印 自定义打印控件 报表打印 小智开源报表工具 分组排名报表

【论文速读】| TCSR-SQL:面向表内容感知的自检索文本到SQL方法

云起无垠

MobPush REST API的推送 API之创建推送

MobTech袤博科技

Java 开发者 产品动态

快手开源LivePortrait,实现表情姿态极速迁移,GitHub 6.5K Star

快手技术

人工智能 #开源 可灵 企业号2024年7月PK榜

2024-07-17:用go语言,给定一个整数数组nums, 我们可以重复执行以下操作: 选择数组中的前两个元素并删除它们, 每次操作得到的分数是被删除元素的和。 在保持所有操作的分数相同的前提下,

福大大架构师每日一题

福大大架构师每日一题

解决多源异构数据整合难题"良策“,助企业高效管理数据资产

Aloudata

数据管理 Data Fabric 多源异构

详解 Apifox:批量添加接口请求 Body 参数的方法

Apifox

程序员 前端 后端 API body

Meme“吞噬”市场,VC项目失宠,加密市场下一步何去何从?

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

MQTT & micro-ROS:构建高效的机器人应用

EMQ映云科技

物联网 机器人 mqtt emqx

软件测试简历书写、职业规划及面试的必备技能

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

测试

开源数据大屏

源字节1号

小程序 开源 前端 后端

小智常见报表示例--层次坐标--条件汇总报表

小智数据

自定义报表打印控件 报表批量打印 小智开源报表工具

淘宝/天猫商品详情API接口与电商数据质量管理的结合应用

技术冰糖葫芦

API API 编排 API 文档 API 协议

苏州企业如何通过IT外包实现降本增效?苏州IT外包案例分享

苏州服务器托管

IT外包公司 IT外包服务

快速明白高校采购云管平台4大必要性

行云管家

云计算 云服务 高校 云管平台

软件测试学习笔记丨测试用例流程设计

测试人

软件测试

南京大学携手和鲸、智谱,签署“101 数智领航计划”,共启人工智能赋能教育新篇章

ModelWhale

人工智能 数据科学 校企合作 智谱AI

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