真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ABAP和Java里的單例模式攻擊實(shí)例

這篇文章主要講解了“ABAP和Java里的單例模式攻擊實(shí)例”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“ABAP和Java里的單例模式攻擊實(shí)例”吧!

創(chuàng)新互聯(lián)建站專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、牟定網(wǎng)絡(luò)推廣、微信小程序定制開(kāi)發(fā)、牟定網(wǎng)絡(luò)營(yíng)銷(xiāo)、牟定企業(yè)策劃、牟定品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供牟定建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):18980820575,官方網(wǎng)址:www.cdcxhl.com

面向?qū)ο缶幊淌澜缋锏膯卫J?Singleton)可能是設(shè)計(jì)模式里最簡(jiǎn)單的一種,大多數(shù)開(kāi)發(fā)人員都覺(jué)得可以很容易掌握它的用法。單例模式保證一個(gè)類(lèi)僅有一個(gè)實(shí)例,并提供一個(gè)訪(fǎng)問(wèn)它的全局訪(fǎng)問(wèn)點(diǎn)。

然而在某些場(chǎng)景下,這種設(shè)計(jì)模式的單例特性會(huì)被破壞,看下面這個(gè)例子:

ABAP和Java里的單例模式攻擊實(shí)例

代碼的第三行,這個(gè)ABAP類(lèi)實(shí)現(xiàn)了接口if_serializable_object,這意味著它可以被關(guān)鍵字CALL TRANSFORMATION進(jìn)行序列化和反序列化操作。

使用下面的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里的單例模式攻擊實(shí)例

執(zhí)行之后,在調(diào)試器里發(fā)現(xiàn)lo_instance和lo_instance2指向了兩個(gè)不同的對(duì)象實(shí)例,說(shuō)明此時(shí)這個(gè)ABAP單例模式已經(jīng)被破壞了。

ABAP和Java里的單例模式攻擊實(shí)例

再看看Java,下面是一個(gè)最簡(jiǎn)單的Java單例模式:

ABAP和Java里的單例模式攻擊實(shí)例

然而我們?nèi)匀豢梢酝ㄟ^(guò)Java的反射機(jī)制來(lái)破壞這個(gè)單例:

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里的單例模式攻擊實(shí)例

在Java里,我們可以通過(guò)枚舉類(lèi)來(lái)防御這種反射攻擊:

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

ABAP和Java里的單例模式攻擊實(shí)例

這種單例模式的消費(fèi)代碼:

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

此時(shí)別有用心的攻擊者如果想使用反射機(jī)制創(chuàng)建新的實(shí)例,會(huì)收到下面的報(bào)錯(cuò)信息:

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里的單例模式攻擊實(shí)例”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)ABAP和Java里的單例模式攻擊實(shí)例這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


本文標(biāo)題:ABAP和Java里的單例模式攻擊實(shí)例
轉(zhuǎn)載來(lái)源:http://weahome.cn/article/gccijd.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部