AJAX復(fù)雜性及安全性
AJAX代碼復(fù)雜性
一、多種語言和架構(gòu)
客戶端:vbscript,javascript
服務(wù)器端:java,c#,php,ruby on rails,python,perl
表現(xiàn)層:html css
轉(zhuǎn)換語言:xml,xslt,SOAP
查詢語言:SQL
二、javascript特性
1)解釋型語言,每一次錯誤都是運行時錯誤。難重現(xiàn),難定位
2)弱類型:對變量不做檢查,所有隱式聲明的變量都會被認(rèn)為是全局變量
三、異步性
一個通過異步方式處理數(shù)據(jù)的應(yīng)用程序會同時執(zhí)行多個線程,要正確協(xié)調(diào)好這些線程非常困難。最常見的問題就是競爭條件:e.g.銀行系統(tǒng)中的存取款功能,應(yīng)用程序只有在很大的負(fù)載壓力下才會暴露出線程方面的漏洞。
AJAX應(yīng)用程序的常見漏洞
1)像API一樣的web應(yīng)用程序,過度細(xì)化服務(wù)端API,使得攻擊者有機(jī)會控制程序的流程(透明性)
2)API身份認(rèn)證問題
3)與用戶相關(guān)的敏感數(shù)據(jù)硬編碼在代碼中,
4)在javascript中存儲會話狀態(tài),例如存儲在隱藏的表單域或者cookie中
5)包含在客戶端的注釋及文檔。
6)在客戶端進(jìn)行數(shù)據(jù)交換,將原始的數(shù)據(jù)轉(zhuǎn)換為HTML代碼,在許多情況下,返回的響應(yīng)信息中包含的都是XML或者JSON格式的原始數(shù)據(jù),
AJAX透明性,可以通過代碼混淆來隱藏應(yīng)用程序邏輯的很好辦法。
劫持AJAX應(yīng)用程序
JavaScript的動態(tài)特性使得其他JavaScript程序可以自動修改某個AJAX應(yīng)用程序的源代碼。方法沖突(在同一個作用域內(nèi),最后聲明的同名方法會默認(rèn)覆蓋掉之前的方法聲明)不僅可以用來重寫某個方法的實現(xiàn),還可以被動監(jiān)視程序中的數(shù)據(jù)流向。任何人都可以對客戶端代碼進(jìn)行反向工程分析,即使它是一部分一部分動態(tài)加載的。由某個用戶定義的方法不僅能覆蓋其他用戶定義的方法,還可以覆蓋像window.alert()這樣的內(nèi)置方法,甚至是原生的對象構(gòu)造方法。這使得攻擊者可以實現(xiàn)JSON劫持攻擊,竊取由AJAX返回的JSON內(nèi)容。