写点什么

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

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

关注

评论

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

实施Scrum敏捷开发必选的敏捷工具

顿顿顿

Scrum 敏捷开发 项目管理工具 Scrum Master 敏捷开发管理工具

Prompt Learning,In-content Learning区别| 社区征文

汀丶人工智能

人工智能 prompt learning 年中技术盘点 指示学习 instruction learning

大语言模型的预训练[5]:语境学习、上下文学习In-Context Learning设计以及ICL底层机制等原理详解| 社区征文

汀丶人工智能

人工智能 自然语言处理 nlp 年中技术盘点 ICL

实际上手体验maven面对冲突Jar包的加载规则 | 京东云技术团队

京东科技开发者

maven pom jar 包部署 企业号 7 月 PK 榜

人工智能革命|是疯狂炒作还是大势所趋?

SEAL安全

B2C #人工智能 ChatGPT 企业号 7 月 PK 榜 趋势解读

快照隔离级别原理 | StoneDB 技术分享 #1

StoneDB

MySQL 数据库 HTAP StoneDB

解决直播间源码音视频不同步问题的有效方式——山东布谷科技创作

山东布谷科技

软件开发 实时音视频 源码搭建 直播源码 直播间

一文读懂Hhybrid App开发模式

没有用户名丶

LCD拼接屏、LED显示屏和OLED显示屏的主要区别

Dylan

LCD1602液晶显示屏 LED显示屏 led显示屏厂家 OLED

区块链游戏六月月报: 市场分析,机遇与挑战

Footprint Analytics

区块链游戏 NFT gamefi

软件测试/测试开发丨Linux 数据处理三剑客学习笔记

测试人

Linux 程序员 软件测试 grep awk

【会议】2023 年第二十届 ChinaJoy 展前预览(同期会议篇-CGDC)正式发布!

CGDC中国游戏开发者大会

设计 开发 游戏开发 ChinaJoy

JavaScript 的优雅编程技巧:Singleton Pattern

沉浸式趣谈

JavaScript 设计模式 单例模式

Mediabox:年度最佳音视频开发工具

阿里云CloudImagine

云计算 阿里云 音视频 视频云

前端不死:新兴技术与前端未来展望 | 社区征文

维李设论

大前端 前端工程师 年中技术盘点 前端趋势 前端未来

基于Taro开发京东小程序小记 | 京东云技术团队

京东科技开发者

小程序 taro 小程序管理 企业号 7 月 PK 榜

大模型的出现及我的思考 | 社区征文

于仔学技术

人工智能 大模型 社区征文 AIGC 年中技术盘点

开创未来用户体验的新篇章 | 社区征文

HelloWorld杰少

年中技术盘点

金融机构上堡垒机的三大理由看这里!

行云管家

网络安全 信息安全 金融 堡垒机

数字化转型与架构-规划篇|承上启下的能力热力图

数字随行

数字化转型

GreatSQL通过错误日志信息判断数据库实例是如何关闭的

GreatSQL

数据库 greatsql

浅谈一下企业IT运维痛点以及好用的运维软件推荐

行云管家

云计算 运维 IT运维

让代码优雅起来:记一次代码微重构实践 | 京东云技术团队

京东科技开发者

代码重构 优雅 企业号 7 月 PK 榜

流程编排及可视化 | 京东云技术团队

京东科技开发者

可视化 可视化开发 流程编排 企业号 7 月 PK 榜

Nautlius Chain主网正式上线,模块Layer3时代正式开启

西柚子

MobTech 秒验审核流程指南

MobTech袤博科技

程序员 前端

ControlNet新玩法!一键生成AI艺术二维码QR

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

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