文件處理相關(guān)問題
文件處理相關(guān)問題
概述:
在有些Web應(yīng)用中,外界能夠通過傳入?yún)?shù)的形式來指定服務(wù)器中的文件名。比如由外界參數(shù)來指定模板文件的情況。這樣的Web應(yīng)用可能會招致以下攻擊。
非法訪問Web服務(wù)器內(nèi)的文件(目錄遍歷)
調(diào)用OS命令(OS命令注入)
目錄遍歷漏洞:
Web應(yīng)用中允許外界以參數(shù)的形式來指定服務(wù)器上的文件名時,如果沒有對文件名進行充分的校驗 ,就可能會造成意料之外的問題,比如文件被瀏覽、篡改或刪除。該安全隱患被稱為目錄遍歷漏洞。
目錄遍歷漏洞會造成以下影響。
瀏覽Web服務(wù)器中的文件
泄露重要信息
篡改或刪除Web服務(wù)器中的文件。
篡改網(wǎng)頁內(nèi)容,散布謠言或惡意誹謗他人
布下圈套將用戶誘導(dǎo)至惡意網(wǎng)站
刪除腳本文件或配置文件導(dǎo)致服務(wù)器宕機
通過篡改腳本文件從而在服務(wù)器上執(zhí)行任意腳本。
目錄遍歷漏洞的防范策略如下,執(zhí)行其中一項即可。
避免由外界指定文件名
文件名中南不予許包含目錄名
限定文件名中僅包含字母和數(shù)字
目標遍歷漏洞總覽:
產(chǎn)生地點:
能夠由外界指定文件名的頁面。
影響范圍:
所有頁面。
影響類型:
泄露隱私信息、篡改或刪除信息、執(zhí)行任意腳本、使應(yīng)用停止服務(wù)
影響程度:
大
用戶參與程度:
不需要
對策概要:
執(zhí)行其中一項即可。
避免由外界指定文件名
文件名中南不予許包含目錄名
限定文件名中僅包含字母和數(shù)字
安全隱患產(chǎn)生的原因:
當應(yīng)用滿足一下3個條件時,就有可能產(chǎn)生目錄遍歷漏洞。
外界能夠指定文件名
能夠使用絕對路徑或相對路徑等形式來指定其他目錄的文件名。
沒有校驗是否允許訪問拼接后的文件名
如果從開發(fā)著的角度來考慮的話,漏洞產(chǎn)生的可能原因是因為開發(fā)者沒有考慮到“外界能夠指定其他目錄”的可能性。
由于目錄遍歷漏洞的產(chǎn)生需要同時滿足以上3個條件,因此,只要使其中任意一項無法滿足也就能夠?qū)⒙┒聪?/p>
防御措施:
避免由外界指定文件名:
如果能避免文件名由外界指定,就能從根本上解決目錄遍歷漏洞。具體方法右如下幾種。
將文件名固定
將文件名保存在會話變量中
不直接指定文件名,而是使用編號等方法間接指定。
文件名中不允許包含目錄名:
如果文件名中不包括目錄名(包括../)就能確保應(yīng)用中只能訪問給定目錄中的文件,從而也就消除了目錄遍歷漏洞產(chǎn)生的可能性。
表示目錄的字符/ 、 \ : 等因操作系統(tǒng)而異,不同的操作系統(tǒng)應(yīng)當采用不同的程序庫。在PHP中南則能夠使用basename函數(shù)。
basename函數(shù)會接收帶有目錄的文件名(也包括Windows的盤符),并返回末尾的文件名部分。例如basename(’../../…/etc/hosts’)返回的結(jié)果即為hosts。
限定文件名中僅包含字母和數(shù)字:
如果能夠限定文件名的字符種類僅為字母和數(shù)字,那么用于目錄遍歷攻擊的字符就會無法使用,因此這個方法也能作為目錄遍歷的防范策略。
復(fù)制
總結(jié)對策:
實施以下任一一項
避免由外界指定文件名
文件名中不允許包含目錄名
限定文件名中僅包含字母和數(shù)字
內(nèi)部文件被公開
概述:
Web服務(wù)器的公開目錄中有時會放置對外保密的文件。這種情況下,外界一旦得知文件的URL,就能夠瀏覽這些內(nèi)部文件。
內(nèi)部文件被公開會造成如下影響。
重要信息被泄露。
防范內(nèi)部文件被公開的對策為,不在公開目錄中放置內(nèi)部文件?;蛘弑kU起見,也可以直接禁用目錄列表功能。
在httpd.conf文件中:
復(fù)制
安全隱患的產(chǎn)生原因:
導(dǎo)致內(nèi)部文件被公開的原因為,內(nèi)部文件被放在了公開目錄中。當應(yīng)用滿足一下條件時,放置在公開目錄下的文件就能被外界訪問。
文件被放置在公開目錄中
有方法得知訪問文件的URL
沒有對文件設(shè)置訪問權(quán)限
其中,得知訪問文件的URL的手段有如下幾種:
目錄列表功能被設(shè)為有效
文件名為日期、用戶名或連續(xù)數(shù)值等能夠被推測的值
user.dat、data.txt等常見文件名
通過錯誤消息或其他安全隱患而得知文件名
被外部網(wǎng)絡(luò)鏈接進而被搜索引擎收錄
文件上傳相關(guān)問題
概要:
針對文件上傳功能的攻擊類型有如下幾種:
針對上傳功能的DoS攻擊
上傳的文件在服務(wù)器上作為腳本執(zhí)行。
誘使用戶下載惡意文件。
防范策略:
防范DoS攻擊:
防范DoS攻擊的一種有效策略為限制上傳文件的容量。PHP能夠在php.ini中設(shè)置上傳功能的容量限制。下表中列出了與文件上傳相關(guān)的配置項。建議在滿足應(yīng)用需求的前提下禁令將值設(shè)置的小一些。如果應(yīng)用不提供文件上傳功能,那么只需要將file_uploads設(shè)置為Off即可。
設(shè)置項目名解說默認值file_uploads是否允許使用文件上傳功能Onupload_max_filesize單個文件的最大容量2MBmax_file_uploads單詞請求最大文件上傳個數(shù)20post_max_sizePOST請求正文的最大限制8MBmemory_limit腳本所能申請到的最大內(nèi)存值128MB
通過上傳文件使服務(wù)器執(zhí)行腳本:
有些文件上傳處理會將用戶上傳的文件保存至Web服務(wù)器的公開目錄中。這時,如果應(yīng)用中允許上傳文件的擴展名為php、asp、aspx、jsp等腳本文件的擴展名,用戶就能在服務(wù)器上將啥概念車的文件作為腳本執(zhí)行。
如果外界傳入的腳本在服務(wù)器上被執(zhí)行,就會造成與OS命令注入同樣的影響,具體如下:
瀏覽、篡改或刪除Web服務(wù)器內(nèi)的文件。
對外發(fā)送郵件
攻擊其他服務(wù)器(稱為墊腳石)
為了防范通過上傳文件而在服務(wù)器上執(zhí)行腳本,可以綜合實施以下兩種方法,或者實施其中的任意一種。
不將用戶上傳的文件保存在公開目錄中,瀏覽文件需要通過腳本。
將文件的擴展名限定為不可執(zhí)行的腳本文件。