写点什么

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

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

关注

评论

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

TDD、BDD、ATDD都是什么、有什么区别?(上)

禅道项目管理

华为云软件精英实战营——感受软件改变世界,享受Coding乐趣

华为云PaaS服务小智

软件开发 华为云 大赛

Data Rescue Pro for Mac(磁盘数据恢复工具) v6.0.8中文版

mac

数据恢复软件 苹果mac Windows软件 Data Rescue

生成式AI:助力网络安全,挑战与机遇并存

百度开发者中心

人工智能 网络安全、 生成式AI 文心一言

生成式AI:重新定义生产力与创造力

百度开发者中心

人工智能 ChatGPT 生成式AI 文心一言

Clang编译数据库信息扩展

maijun

Clang 编译数据库

生成式AI领先,实现客服机器人真智能

百度开发者中心

人工智能 机器人 生成式AI 文心一言

直播预告!生鲜与零售商品识别系统产业实践与部署详解

飞桨PaddlePaddle

人工智能 百度飞桨 硬件生态

MegEngine 使用小技巧:Profiler使用手册

MegEngineBot

开源 性能优化

​iOS上架审核宝典:如何避免被拒一次提交成功

ios

大数据平台与数据仓库的五大区别

行云管家

大数据 数据仓库 数据安全 大数据平台

没有永远的王者…Zig替代C,将成定局!

互联网工科生

C语言 C++ Zig语言

软件测试/测试开发丨Python 学习笔记 之 链表

测试人

Python 程序员 软件测试 自动化测试 测试开发

Presto 设计与实现(十二):SQL 逻辑计划

冰心的小屋

数据湖 presto 设计与实现 SQL Plan

Graph + LLM|图数据库技术如何助力行业大语言模型应用落地

悦数图数据库

数据库 图数据库

HarmonyOS“一次开发,多端部署“优秀实践——玩机技巧,码上起航

HarmonyOS开发者

HarmonyOS

大数据平台三大优势详解-行云管家

行云管家

数据库 大数据 数据安全 大数据平台

如何使用io_uring构建快速响应的I/O密集型应用?

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 8 月 PK 榜

朝夕光年游戏自动化测试实践

字节跳动技术范儿

测试 自动化测试 游戏测试

DR5018M|IPQ5018 11AC SOM WIFI6 Pioneering the Future of Wireless Innovation

wallyslilly

wifi6 ipq5018

Graph + LLM 实践指南|如何使用自然语言进行知识图谱构建和查询

悦数图数据库

数据库 图数据库

探索生成式人工智能的前景

高端章鱼哥

人工智能 AIGC 生成式人工智能

PHP/MySQL开发环境 MAMP Pro for Mac激活安装

胖墩儿不胖y

Mac软件

2023年广州国际大健康产品及健康食品展会

秋硕展览

2023健博会 保健用品展 护理用品

万界星空科技|免费开源MES系统|自动排产管理

万界星空科技

开源 MES系统

面试了38位Java候选人之后,我总结出了他们关于面试中的16条通病

程序员小毕

Java 程序员 面试 简历 八股文

生成式AI助力文学艺术创作

百度开发者中心

人工智能 艺术 文心一言

生成式AI:业务流程的变革与机遇

百度开发者中心

人工智能 生成式AI 文心一言

打造千亿文件量级的大规模分布式文件系统

Baidu AICLOUD

文件系统 分布式文件存储 元数据

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