如何防止单例模式被JAVA反射攻击
来源:互联网 发布:java向上取整 编辑:程序博客网 时间:2024/05/16 17:07
单例模式相信大家都知道,用过的人不在少数。之前写过一篇博文《singleton模式四种线程安全的实现》(参见:http://blog.csdn.net/u013256816/article/details/50427061),讲诉了单例模式的四种写法,并指出占位符模式的写法比较ok,详见如下:
但这都是基于一个条件:确保不会通过反射机制调用私有的构造器。这里举个例子,通过JAVA的反射机制来“攻击”单例模式:
运行结果:false
可以看到,通过反射获取构造函数,然后调用setAccessible(true)就可以调用私有的构造函数,所有e1和e2是两个不同的对象。
如果要抵御这种攻击,可以修改构造器,让它在被要求创建第二个实例的时候抛出异常。
经修改后:
测试代码:
运行结果:
可以看到,成功的阻止了单例模式被破坏。
从JDK1.5开始,实现Singleton还有新的写法,只需编写一个包含单个元素的枚举类型。推荐写法:
测试代码:
0 0
- 如何防止单例模式被JAVA反射攻击
- 如何防止单例模式被JAVA反射攻击
- 如何防止单例模式被JAVA反射攻击
- 如何防止单例模式被JAVA反射攻击
- 如何防止单例模式被JAVA反射攻击
- 如何防止单例模式被 JAVA 反射攻击
- 枚举单例模式如何防止反射攻击
- Singleton单例模式-如何防止JAVA反射对单例类的攻击?
- 防止单例模式被JAVA反射攻击(带代码慎入)
- 防止反射攻击的单例模式-siglton -摘自《effective java》
- 防止单例模式被攻击
- 防止单例模式被攻击的一个Demo
- Java设计模式(一):单例模式,防止反射和反序列化漏洞
- Java设计模式(一):单例模式,防止反射和反序列化漏洞
- 如何破坏单例模式?如何防止?
- java单例模式详解完美实现(包括反射破坏的防止和线程安全)
- 单例模式,防止反射和反序列化漏洞
- java 单例模式防治反攻击
- 哇,这就是传说中程序员的社区
- 回归和分类的区别
- win7 修改winlogon内存 禁用Ctrl+Alt+Delete
- mysql之将表中的明文变为MD5
- linux mysql install
- 如何防止单例模式被JAVA反射攻击
- mysql创建一个改变固定字段才更新时间的时间戳timestamp
- 在docker环境中制作openstack镜像文件
- Kalman滤波算法原理(Matlab/C/C++)
- 关于synchronize同步的理解
- J2EE开发需求下载地址
- windows上eclipse搭建hadoop开发环境(自用,备忘)
- 为什么js放在head部分没有反应,必须放在body部分下才会起作用
- 【SQL Server 批量插入数据】