博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Java安全编码标准》一1.6 序列化
阅读量:7007 次
发布时间:2019-06-28

本文共 1193 字,大约阅读时间需要 3 分钟。

1.6 序列化

序列化使得Java程序中对象的状态能被抓取并写入到字节流中[Sun 2004b]。这使得该对象的状态能够保存下来,所以可以在未来需要的时候恢复(通过反序列化)。序列化可以通过网络使用RMI的方式调用Java方法,这些对象被编组(序列化),在分布部署的虚拟机之间进行交换,然后进行解组(反序列化)。序列化还广泛使用在Java Beans中。

可以用以下方式序列化对象:

ObjectOutputStream oos = new ObjectOutputStream(  new FileOutputStream("SerialOutput"));oos.writeObject(someObject);oos.flush();

可以用以下的方式反序列化对象:

ObjectInputStream ois = new ObjectInputStream(  new FileInputStream("SerialOutput"));someObject = (SomeClass) ois.readObject();

序列化能够捕捉对象中的所有非暂态字段,包括那些正常情况下不能读取的非公有字段,这通过object类的Serializable接口来实现。序列化的值写入字节流之后,如果字节流是可读的,那么原先那些正常情况下不能访问的字段的值也就可以通过推导得出。此外访问,当反序列化一个类时,原来保存的值可能会被修改或者伪造。

引进一个安全管理器并不能防止正常情况下无法访问的字段被序列化和反序列化(如果字节流需要被存储或发送,那么必须给予它从文件或网络进行读写的权限)。网络流量(包括RMI)可以得到保护,但是,这需要使用SSL/TLS协议。
在序列化和反序列化对象时需要进行特殊处理的类可以实现有以下签名的方法[API 2006]:

private void writeObject(java.io.ObjectOutputStream out) throws IOException;private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException;

如果一个Serializable类没有重写writeObject()方法的实现,这个对象会使用默认的方法来完成序列化,它会序列化所有的public、protected、package-private,以及private字段,除了transient字段。同样,当Serializable类没有重写readObject()方法的实现时,这个对象会反序列化所有的public、protected,以及private字段,除了那些transient字段。这个问题会在规则SER01-J中深入探讨。

转载地址:http://switl.baihongyu.com/

你可能感兴趣的文章
循环神经网络(Recurrent Neural Networks, RNN)介绍
查看>>
go语言中的strings常用函数和格式化输出
查看>>
!!!!Linux系统开发 系列 4 进程资源 环境 fork()子进程 wait() waitpid()僵尸 孤儿进程...
查看>>
[翻译]现代Linux系统上的栈溢出攻击【转】
查看>>
《TCP/IP具体解释》读书笔记(22章)-TCP的坚持定时器
查看>>
LINQ体验(8)——LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods
查看>>
【WPF】三维模型中的“照相机”
查看>>
第五篇:Hadoop流
查看>>
CSS元素选择器 element selector(type selector)
查看>>
iOS开关按钮UISwitch控件
查看>>
Java 实现代理(Proxy)模式
查看>>
如何在spring中运行多个schedulers quartz 实例
查看>>
《如何高效学习》读书笔记
查看>>
Hibernate(八):基于外键映射的1-1关联关系
查看>>
Microsoft Office Word 中的公式自动编号
查看>>
使用html5 FileReader获取图片,并异步上传到server(不使用iframe)
查看>>
Android性能优化之ListView缓存机制
查看>>
Android Camera API/Camera2 API 相机预览及滤镜、贴纸等处理
查看>>
虚拟地址与物理地址的映射
查看>>
数据库分页
查看>>