ABAP和Java里的单例模式攻击实例

这篇文章主要讲解了“ABAP和Java里的单例模式攻击实例”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ABAP和Java里的单例模式攻击实例”吧!

创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、成都做网站、牟定网络推广、微信小程序定制开发、牟定网络营销、牟定企业策划、牟定品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供牟定建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

面向对象编程世界里的单例模式(Singleton)可能是设计模式里最简单的一种,大多数开发人员都觉得可以很容易掌握它的用法。单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。

然而在某些场景下,这种设计模式的单例特性会被破坏,看下面这个例子:

ABAP和Java里的单例模式攻击实例

代码的第三行,这个ABAP类实现了接口if_serializable_object,这意味着它可以被关键字CALL TRANSFORMATION进行序列化和反序列化操作。

使用下面的ABAP代码:

DATA(lo_instance) = zcl_jerry_singleton=>get_instance( ).
DATA: s TYPE string.
CALL TRANSFORMATION id SOURCE model = lo_instance RESULT XML s.
DATA: lo_instance2 TYPE REF TO zcl_jerry_singleton.
CALL TRANSFORMATION id SOURCE XML s RESULT model = lo_instance2.

ABAP和Java里的单例模式攻击实例

执行之后,在调试器里发现lo_instance和lo_instance2指向了两个不同的对象实例,说明此时这个ABAP单例模式已经被破坏了。

ABAP和Java里的单例模式攻击实例

再看看Java,下面是一个最简单的Java单例模式:

ABAP和Java里的单例模式攻击实例

然而我们仍然可以通过Java的反射机制来破坏这个单例:

Class classType = JerrySingleton.class;  
Constructor c = classType.getDeclaredConstructor(null);  
c.setAccessible(true);  
JerrySingleton e1 = (JerrySingleton)c.newInstance();  
JerrySingleton e2 = JerrySingleton.getInstance();  
System.out.println(e1 == e2);

ABAP和Java里的单例模式攻击实例

在Java里,我们可以通过枚举类来防御这种反射攻击:

public enum JerrySingletonAnotherApproach {
  INSTANCE ;  
  
  private String name = "Jerry" ;
   
  public String getName() {  
      return this.name;  
  }  
}

ABAP和Java里的单例模式攻击实例

这种单例模式的消费代码:

System.out.println("Name:" + JerrySingletonAnotherApproach.INSTANCE.getName());

此时别有用心的攻击者如果想使用反射机制创建新的实例,会收到下面的报错信息:

Exception in thread "main" java.lang.NoSuchMethodException: singleton.JerrySingletonAnotherApproach.()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.getDeclaredConstructor(Class.java:2178)
at singleton.SingletonAttack.test3(SingletonAttack.java:31)
at singleton.SingletonAttack.main(SingletonAttack.java:43)

感谢各位的阅读,以上就是“ABAP和Java里的单例模式攻击实例”的内容了,经过本文的学习后,相信大家对ABAP和Java里的单例模式攻击实例这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


网页题目:ABAP和Java里的单例模式攻击实例
文章网址:http://myzitong.com/article/gccijd.html