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