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