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