一直想学习java安全,但是一直无从下手。今天,我下定决心要好好学习。当然,后面的内容可能会有一些错误,给小白带来困扰。序列化和反序列化Java序列化是指将Java对象转换为字节序列的过程;Java反序列化是指将字节序列还原成Java对象的过程。序列化分为序列化和反序列化两部分。序列化是该过程的第一部分,它将数据分解为字节流以存储在文件中或通过网络传输。反序列化就是打开字节流并重建对象。对象序列化不仅涉及将原始数据类型转换为字节表示形式,有时还涉及恢复数据。恢复数据需要恢复数据的对象实例。为什么需要序列化和反序列化我们知道,当两个进程进行远程通信时,它们可以向对方发送各种类型的数据,包括文本、图片、音频、视频等,而这些数据会以二进制序列的形式存在于计算机上。网络上传。那么当两个Java进程进行通信时,能否实现进程间的对象传递呢?答案是肯定的。怎么做?这需要Java序列化和反序列化。也就是说,一方面,发送方需要将Java对象转换成字节序列,然后在网络上传输;另一方面,接收方需要从字节序列中恢复出Java对象。当我们理解了为什么需要Java序列化和反序列化时,我们自然会想到Java序列化的好处。优点是实现了数据的持久化,可以通过序列化将数据永久保存到硬盘中(一般保存在文件中)。顺序。①当要将内存中的对象保存到文件或数据库中时;②当你想使用套接字在网络上传输对象时;③为什么要通过RMI传递对象会有安全问题?只要服务端对数据进行反序列化,客户端传递过来的readObject中的代码就会自动执行,让攻击者有能力在服务端运行代码。几种常见的序列化和反序列化协议XML&SOAPJSONProtobuf理解类比快递,打包和拆包有些快递包裹在打包和拆包的时候有独特的要求,比如易碎向上,类比重写writeObject和readObject【----求助网络安雪,补充vx到以下所有学习资料:yj009991,得到“ThoughtNo”的备注!】①网络安全学习成长路径思维导图②60+经典网络安全工具包③100+SRC漏洞分析报告④150+在线安全攻防实战技术电子书⑤最权威的CISSP认证考试指南+题库⑥1800多页CTF实战技能手册⑦网络安全公司面试题(含答案)最新合集(含答案)⑧APP客户端安全检测指南(Android+IOS)实例Java反序列化操作,其中很多需要开发者深度参与,所以你会发现很多库都会实现readObject和writeObject方法,这与PHP中很少使用\__wakeup和__sleep形成鲜明对比。上篇《Java安全漫谈 - 06.RMI篇(3)》讲了classAnnotations,这次讲objectAnnotation。Java序列化一个对象时,会调用这个对象中的writeObject方法。参数类型为ObjectOutputStream,开发者可以向该流写入任意内容;反序列化时会调用readObject,开发者也可以从中读取。把之前写的内容拿出来处理。创建一个人类importjava.io.IOException;importjava.io.ObjectInputStream;importjava.io.Serializable;publicclassPersonimplementsSerializable{privateStringname;私人年龄;publicPerson(){}publicPerson(Stringname,intage){this.name=name;这个。年龄=年龄;}@OverridepublicStringtoString(){return"Person{"+"name='"+name+"\'"+",'age="+age+'}';}}创建一个序列化类FileOutputStream("ser.bin"));oos.writeObject(obj);}publicstaticvoidmain(String[]args)throwsException{Personperson=newPerson("xinyuan",22);序列化(p人);System.out.println(人);}}创建一个反序列化类新的FileInputStream("ser.bin"));对象obj=ois.readObject();返回对象;}publicstaticvoidmain(String[]args)throwsException{Personperson=(Person)unserialize("ser.bin");System.out.println(人);}}可能的形式1.入口类的readObject直接调用person类中的dangerous方法,重写readObject方法,sequence转换后,反序列化2.入口类参数包含一个可控类,其中有一个dangerous方法,whichreadObject时调用3.入口类参数包含一个可控类,调用其他类有危险方法,调用readObject条件普通条件继承Serializable入口类源码(重写readObject参数类型广,最好jdk自带)Map
