Java序列化和反序列化出现漏洞的解决方案-创新互联
这篇文章将为大家详细讲解有关Java序列化和反序列化出现漏洞的解决方案,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
创新互联公司长期为1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为志丹企业提供专业的做网站、成都网站设计,志丹网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。Java序列化
Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。
Java反序列化
反序列化就是将字节序列恢复为Java对象的过程
整个过程都是 Java 虚拟机(JVM)独立的,也就是说,在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象,因此可以实现多平台之间的通信、对象持久化存储,主要有如下几个应用场景。
HTTP:多平台之间的通信,管理等
RMI:是 Java 的一组拥护开发分布式应用程序的 API,实现了不同操作系统之间程序的方法调用。值得注意的是,RMI 的传输 100% 基于反序列化,Java RMI 的默认端口是1099端口。
JMX:JMX 是一套标准的代理和服务,用户可以在任何 Java 应用程序中使用这些代理和服务实现管理,中间件软件 WebLogic 的管理页面就是基于 JMX 开发的,而 JBoss 则整个系统都基于 JMX 构架。
系列化反序列化基础
序列化和反序列化本身并不存在问题。但当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码。
一个类的对象能够序列化的成功需要两个条件
- 该类必须实现 java.io.Serializable 接口
- 该类的所有属性必须是可序列化的。如果有一个属性不是可序列化的,则该属性必须注明是短暂的。
漏洞基本原理
简单的反序列化Demo
首先定义对象类Persion,包含两个参数
public class implements java.io.Serializable{ public String name; public int age; public void info(){ System.out.println("Name:"+this.name+";nAge:"+this.age); } }
文章题目:Java序列化和反序列化出现漏洞的解决方案-创新互联
分享URL:http://myzitong.com/article/dcocjj.html