隨著簡單 XML API、Web 服務和 Rich Internet Applications (RIAs) 的發(fā)展,更多組織幾乎在所有方面(從配置文件到遠程過程調用)都采用 XML 作為數(shù)據(jù)格式。一般的Web2.0網(wǎng)站和復雜的WEB應用使用XML作為數(shù)據(jù)格式。XML應用程序更容易受到代碼注入的攻擊,尤其是 XPath 注入攻擊。
Path語言表達的句法與SQL查詢在許多方面都有些相似,但是Xpath注入攻擊的危險性更勝于SQL注入攻擊。
南昌網(wǎng)站建設公司百恒網(wǎng)工程師總結:xPath注入與SQL注入攻擊帶來的危害相似,攻擊者能利用Xpath注入同樣能迅速獲取數(shù)據(jù)庫的刪除、修改、讀取權限,并可以利用數(shù)據(jù)庫的特性迅速獲取服務器的控制權限;同時大多數(shù)B/S架構的數(shù)據(jù)庫都提供了某種形式的訪問和權限控制,限制用戶訪問某些表格、字段或者查詢。這種權限控制限制攻擊者訪問應用程序的數(shù)據(jù)庫賬戶,而XPath沒有為數(shù)據(jù)庫文件提供訪問限制,攻擊者利用Xpath注入能夠查詢這個數(shù)據(jù)庫中的全部XML對象。
XPath 注入預防
因為 XPath 注入攻擊與 SQL 注入攻擊非常類似,所以很多預防方法也類似。這些預防方法中,多數(shù)也可以類似地應用于預防其他類型的代碼注入攻擊。
身份驗證
不論面對何種應用程序、環(huán)境或語言,都應遵守以下的最佳實踐:
假定所有輸入都可疑。
不僅要驗證數(shù)據(jù)的類型,還要驗證其格式、長度、范圍和內(nèi)容(例如,一個簡單的正則表達式 if (/^"*^';>()/) 就可以找出大多數(shù)可疑的特殊字符)。
在客戶機和服務器上都要驗證數(shù)據(jù),因為客戶機驗證非常容易繞過。
根據(jù)安全軟件開發(fā)的最佳實踐,遵守一致的編寫和 [missing word] 策略實現(xiàn)應用程序安全性。
在發(fā)布應用程序之前測試已知的威脅。參考資料 中的 “Fuzz Testing” 介紹了測試方法。
參數(shù)化
網(wǎng)站建設公司百恒網(wǎng)絡認為與多數(shù)數(shù)據(jù)庫應用程序不同,XPath 不支持參數(shù)化查詢的概念,但是您可以使用其他 API(比如 XQuery)模擬該概念。您不需要構建字符串表達式,然后傳給 XPath 解析器以便在運行時動態(tài)執(zhí)行,而是通過創(chuàng)建保存查詢的外部文件使查詢參數(shù)化。
Web 服務器上的數(shù)據(jù)檢查
要防止 XPath 注入和其他形式的代碼注入,應該檢查所有從 Web 服務器傳到后端服務的數(shù)據(jù)。例如,對于 Apache 您可以使用 Mod_Security 篩選器(比如 SecFilterSelective THE_REQUEST "('|")")查找字符串中的單引號和雙引號并禁止它們。您也可以使用同樣的方法篩選和禁止其他形式的特殊字符,比如 ("*^';>/),這些字符都可以用于各種注入攻擊。這種方法對于使用基于 REST 或 SOAP 的 XML 服務的應用程序可能很好,但是在其他情況下可能不適用。通常的最佳實踐是,從最初的設計到應用程序實現(xiàn)都采用智能安全設計。
希望對廣大站長或網(wǎng)站建設公司技術人員有所幫助,如對此不太理解的,可以與南昌網(wǎng)絡公司百恒網(wǎng)絡技術部聯(lián)系。