- 資訊首頁(yè) > 網(wǎng)絡(luò )安全 >
- ABAP和Java里的單例模式攻擊實(shí)例
這篇文章主要講解了“ABAP和Java里的單例模式攻擊實(shí)例”,文中的講解內容簡(jiǎn)單清晰,易于學(xué)習與理解,下面請大家跟著(zhù)小編的思路慢慢深入,一起來(lái)研究和學(xué)習“ABAP和Java里的單例模式攻擊實(shí)例”吧!
面向對象編程世界里的單例模式(Singleton)可能是設計模式里最簡(jiǎn)單的一種,大多數開(kāi)發(fā)人員都覺(jué)得可以很容易掌握它的用法。單例模式保證一個(gè)類(lèi)僅有一個(gè)實(shí)例,并提供一個(gè)訪(fǎng)問(wèn)它的全局訪(fǎng)問(wèn)點(diǎn)。
然而在某些場(chǎng)景下,這種設計模式的單例特性會(huì )被破壞,看下面這個(gè)例子:
代碼的第三行,這個(gè)ABAP類(lèi)實(shí)現了接口if_serializable_object,這意味著(zhù)它可以被關(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.
執行之后,在調試器里發(fā)現lo_instance和lo_instance2指向了兩個(gè)不同的對象實(shí)例,說(shuō)明此時(shí)這個(gè)ABAP單例模式已經(jīng)被破壞了。
再看看Java,下面是一個(gè)最簡(jiǎn)單的Java單例模式:
然而我們仍然可以通過(guò)Java的反射機制來(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);
在Java里,我們可以通過(guò)枚舉類(lèi)來(lái)防御這種反射攻擊:
public enum JerrySingletonAnotherApproach { INSTANCE ; private String name = "Jerry" ; public String getName() { return this.name; } }
這種單例模式的消費代碼:
System.out.println("Name:" + JerrySingletonAnotherApproach.INSTANCE.getName());
此時(shí)別有用心的攻擊者如果想使用反射機制創(chuàng )建新的實(shí)例,會(huì )收到下面的報錯信息:
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)
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站