1121212
Java知识点:
功能:数据库操作,文件操作,序列化数据,身份验证,框架开发,第三方库使用等.
框架库:MyBatis,SpringMVC,SpringBoot,Shiro,Log4j,FastJson等
技术:Servlet,Listen,Filter,Interceptor,JWT,AOP,反射机制待补充
安全:SQL注入,RCE执行,反序列化,脆弱验证,未授权访问,待补充
安全:原生开发安全,第三方框架安全,第三方库安全等,待补充
Java-原生使用-序列化&反序列化
序列化与反序列化
序列化:将内存中的对象压缩成字节流
反序列化:将字节流转化成内存中的对象
为什么有序列化技术?
序列化与反序列化的设计就是用来传输数据的。
当两个进程进行通信的时候,可以通过序列化反序列化来进行传输。
能够实现数据的持久化,通过序列化可以把数据永久的保存在硬盘上,也可以理解为通过序列化将数据保存在文件中。
应用场景
(1) 想把内存中的对象保存到一个文件中或者是数据库当中。
(2) 用套接字在网络上传输对象。
(3) 通过RMI传输对象的时候。
几种创建的序列化和反序列化协议
• JAVA内置的writeObject()/readObject()
• JAVA内置的XMLDecoder()/XMLEncoder
• XStream
• SnakeYaml
• FastJson
• Jackson
为什么会出现反序列化安全问题
内置原生写法分析
• 重写readObject方法
• 输出调用toString方法
反序列化利用链
(1) 入口类的readObject直接调用危险方法
(2) 入口参数中包含可控类,该类有危险方法,readObject时调用
(3) 入口类参数中包含可控类,该类又调用其他有危险方法的类,readObject时调用
(4) 构造函数/静态代码块等类加载时隐式
序列化实现,创建用户类,并实现 Serializable接口
package com.example;
import java.io.Serializable;
import java.io.IOException;
import java.io.ObjectInputStream;
// 用户信息类,实现了 Serializable 接口
public class UserDemo implements Serializable {
// 公共成员变量
public String name = "xiaodi";
public String gender = "man";
public Integer age = 30;
// 构造方法
public UserDemo(String name, String gender, Integer age) {
this.name = name;
thi