ABAP和Java里的單例模式攻擊實例-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)專注于和平網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供和平營銷型網(wǎng)站建設(shè),和平網(wǎng)站制作、和平網(wǎng)頁設(shè)計、和平網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造和平網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供和平網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

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

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

ABAP和Java里的單例模式攻擊實例

代碼的第三行,這個ABAP類實現(xiàn)了接口if_serializable_object,這意味著它可以被關(guān)鍵字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里的單例模式攻擊實例

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

ABAP和Java里的單例模式攻擊實例

再看看Java,下面是一個最簡單的Java單例模式:

ABAP和Java里的單例模式攻擊實例

然而我們?nèi)匀豢梢酝ㄟ^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());

此時別有用心的攻擊者如果想使用反射機制創(chuàng)建新的實例,會收到下面的報錯信息:

Exception in thread "main" java.lang.NoSuchMethodException: singleton.JerrySingletonAnotherApproach.<init>()
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里的單例模式攻擊實例”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對ABAP和Java里的單例模式攻擊實例這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

當前文章:ABAP和Java里的單例模式攻擊實例-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://www.muchs.cn/article16/dsocdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、品牌網(wǎng)站設(shè)計、響應(yīng)式網(wǎng)站網(wǎng)站收錄、做網(wǎng)站、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)