保護(hù)Web應(yīng)用程序不受直接對象引用(DOR |
發(fā)布時間: 2012/9/15 18:45:10 |
聯(lián)系請致電:15378720700 河南億恩科技有限公司,專注IDC服務(wù)13年,華中地區(qū)最大IDC服務(wù)商。 BGP新機(jī)房優(yōu)惠活動正在進(jìn)行中。。。期待您的加入。 不妨設(shè)想一個惡意黑客能夠訪問貴公司所有客戶的賬戶細(xì)節(jié),或者使用別人的信用卡在線購物,而這一切只需改變URL中的幾個數(shù)字。這聽起來似乎不太可能,但是如果你的Web應(yīng)用程序容易遭受不安全的直接對象引用的危害,惡意黑客要達(dá)到這個目的簡直易如反掌。 不安全的直接對象引用舉例 這里的“對象”是指文件、目錄、數(shù)據(jù)庫記錄等內(nèi)部實(shí)施的對象,在應(yīng)用程序?qū)RL(或表單參數(shù))中的一個引用暴露給這些對象之一時,就會發(fā)生安全問題。這是因?yàn)楹诳涂梢孕薷倪@些直接對象引用,例如,黑客可以在一個URL被提交之前進(jìn)行參數(shù)修改,企圖訪問一個不同的、未獲得授權(quán)的文件、目錄,或數(shù)據(jù)庫中的條目。如果不加強(qiáng)其它的授權(quán)檢查,這種企圖就會成功。 假設(shè)有一個Web應(yīng)用程序最終會生成下面這個URL: http://www.yourinsecurewebapp.com/yourgetfile.cfm?filename=yoursometextfile.txt 這里有一個非常明顯的對yoursometextfile.txt文件的直接對象引用。它對黑客的誘惑在于,看到如果將這個文件名換成另外一個文件名(如“yourpasswords.txt”或“youraccounts.txt”)會發(fā)生什么。 要取得這種成功,黑客必須正確地猜測出系統(tǒng)上另外一個文件名,但一個更合理的方法,是尋找系統(tǒng)上其它位置的特定內(nèi)容,其使用的方法就是目錄遍歷攻擊(目錄遍歷是Http的一個安全漏洞,它使得攻擊者能夠訪問受限制的目錄,并能夠在Web服務(wù)器的根目錄以外執(zhí)行命令。)。從本質(zhì)上講,這意味著訪問一個完全不同的目錄,或者存在漏洞的應(yīng)用程序的開發(fā)者所構(gòu)建的任何方面。為訪問Apache Tomcat文件名和口令,黑客可能將URL的最后一部分改成:
并非所有的直接對象引用都提供對文件的訪問。還有另外一種可能激發(fā)黑客興趣的URL,其結(jié)尾格式如下:
這會使黑客進(jìn)一步問,“如果我將客戶ID(customerid)換成4568會發(fā)生什么?” 與此類似,如果一個Web應(yīng)用程序允許一個用戶根據(jù)數(shù)據(jù)庫的關(guān)鍵字引用從存儲在數(shù)據(jù)庫中的一個或多個信用卡中的一個,那么黑客修改此數(shù)據(jù)庫的關(guān)鍵字時,會發(fā)生什么呢?
在這里,用戶可以從兩個分別以6902和5586為結(jié)尾的卡中選擇一個,該卡號由數(shù)據(jù)庫的關(guān)鍵字引用,而應(yīng)用程序可以訪問此數(shù)據(jù)庫文件。因此,黑客可以將56或88改為另一個數(shù)字,如78,用來引用屬于另外一個用戶的卡號。如果沒有其它的認(rèn)證檢查來防止這種引用,攻擊將獲得成功。 避免不安全的直接對象引用 避免不安全的直接對象引用(DOR)漏洞的最佳方法是,完全不要暴露私密的對象引用,但如果非用不可,非常重要的一點(diǎn)是確保在向任何用戶提供訪問之前對其進(jìn)行認(rèn)證和審查。全球頂級的Web應(yīng)用安全機(jī)構(gòu)OWASP建議企業(yè)建立一種引用應(yīng)用程序?qū)ο蟮臉?biāo)準(zhǔn)方法,現(xiàn)簡述如下: 1、盡可能避免將私密的對象引用暴露給用戶,如重要的關(guān)鍵字或文件名。 2、運(yùn)用一種“可接受的良好方法”,詳細(xì)地驗(yàn)證任何私密的對象引用。決定準(zhǔn)許用戶訪問哪些文件,并僅授與這些用戶訪問這些文件的權(quán)力。 3、對所有引用的對象都要進(jìn)行驗(yàn)證。 OWASP還提供了第三個要點(diǎn)的一個例子。在此,黑客可以將電子商務(wù)網(wǎng)站的購物車ID參數(shù)改為任何值:
要想防止受到這種攻擊,就只能允許獲得授權(quán)的記錄可以顯示:
直接對象引用的另外一種選擇是每個用戶或會話都使用非直接的對象引用。 在前面那個關(guān)于信用卡的例子中,用戶需要從兩個卡中選擇一個信用卡,這會暴露對信用卡數(shù)據(jù)庫的直接引用。一個更好的方法是將這兩個信用卡的記錄存儲到一個針對此用戶的特定陣列中。關(guān)于信用卡的選擇,其代碼類似于下面的內(nèi)容:
在這種方法中,僅有對此用戶陣列的一個直接引用,它僅包含此用戶的數(shù)據(jù)。將選項(xiàng)的值改為大于2的任何值不會導(dǎo)致其他用戶的信用卡細(xì)節(jié)被利用。然后,應(yīng)用程序?qū)延脩舻奶囟ǖ姆侵苯訉ο笠茫ㄟx項(xiàng)值為1或2)映射回底層的數(shù)據(jù)庫關(guān)鍵字(前面例子中的56和88) 對不安全的直接對象引用的測試 不幸的是,漏洞掃描器在發(fā)現(xiàn)不安全的直接對象引用漏洞方面并不是很高效,所以最佳的選擇是: 1、仔細(xì)檢查代碼,確認(rèn)是否有重要的參數(shù)易于遭到利用和操縱。 2、經(jīng)常實(shí)施專業(yè)的滲透測試。 本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |