在有些web應用中,外界能夠通過傳入引數的形式來指定伺服器中的檔名。比如由外界引數來指定模板檔案的情況。這樣的web應用可能會招致以下攻擊。
web應用中允許外界以引數的形式來指定伺服器上的檔名時,如果沒有對檔名進行充分的校驗 ,就可能會造成意料之外的問題,比如檔案被瀏覽、篡改或刪除。該安全隱患被稱為目錄遍歷漏洞。
目錄遍歷漏洞會造成以下影響。
目錄遍歷漏洞的防範策略如下,執行其中一項即可。
產生地點:
影響範圍:
影響型別:
影響程度:
使用者參與程度:
對策概要:
執行其中一項即可。
當應用滿足一下3個條件時,就有可能產生目錄遍歷漏洞。
外界能夠指定檔名
能夠使用絕對路徑或相對路徑等形式來指定其他目錄的檔名。
沒有校驗是否允許訪問拼接後的檔名
如果從開發著的角度來考慮的話,漏洞產生的可能原因是因為開發者沒有考慮到「外界能夠指定其他目錄」的可能性。
由於目錄遍歷漏洞的產生需要同時滿足以上3個條件,因此,只要使其中任意一項無法滿足也就能夠將漏洞消除。
如果能避免檔名由外界指定,就能從根本上解決目錄遍歷漏洞。具體方法右如下幾種。
如果檔名中不包括目錄名(包括…/)就能確保應用中只能訪問給定目錄中的檔案,從而也就消除了目錄遍歷漏洞產生的可能性。
表示目錄的字元/ 、 \ : 等因作業系統而異,不同的作業系統應當採用不同的程式庫。在php中南則能夠使用basename函式。
basename函式會接收帶有目錄的檔名(也包括windows的碟符),並返回末尾的檔名部分。例如basename(』…/…/…/etc/hosts』)返回的結果即為hosts。
如果能夠限定檔名的字元種類僅為字母和數字,那麼用於目錄遍歷攻擊的字元就會無法使用,因此這個方法也能作為目錄遍歷的防範策略。
<?php
define
('tmpldir'
,'/var/www/html/web');
$templ
=$_get
['template'];
if(!preg_match
(/\a
[a-z0-9]
+\.html\z
/ui', $tmpl))
?>
<?php
readfile
(tmpldir
.$tmple);
?>
實施以下任一一項
web伺服器的公開目錄中有時會放置對外保密的檔案。這種情況下,外界一旦得知檔案的url,就能夠瀏覽這些內部檔案。
內部檔案被公開會造成如下影響。
防範內部檔案被公開的對策為,不在公開目錄中放置內部檔案。或者保險起見,也可以直接禁用目錄列表功能。
在httpd.conf檔案中:
options include execcgi followsymlinks indexes
導致內部檔案被公開的原因為,內部檔案被放在了公開目錄中。當應用滿足一下條件時,放置在公開目錄下的檔案就能被外界訪問。
其中,得知訪問檔案的url的手段有如下幾種:
針對檔案上傳功能的攻擊型別有如下幾種:
防範dos攻擊的一種有效策略為限制上傳檔案的容量。php能夠在php.ini中設定上傳功能的容量限制。下表中列出了與檔案上傳相關的配置項。建議在滿足應用需求的前提下禁令將值設定的小一些。如果應用不提供檔案上傳功能,那麼只需要將file_uploads設定為off即可。
設定專案名
解說預設值
file_uploads
是否允許使用檔案上傳功能
onupload_max_filesize
單個檔案的最大容量
2mbmax_file_uploads
單詞請求最大檔案上傳個數
20post_max_size
post請求正文的最大限制
8mbmemory_limit
指令碼所能申請到的最大記憶體值
128mb
有些檔案上傳處理會將使用者上傳的檔案儲存至web伺服器的公開目錄中。這時,如果應用中允許上傳檔案的擴充套件名為php、asp、aspx、jsp等指令碼檔案的副檔名,使用者就能在伺服器上將啥概念車的檔案作為指令碼執行。
如果外界傳入的指令碼在伺服器上被執行,就會造成與os命令注入同樣的影響,具體如下:
為了防範通過上傳檔案而在伺服器上執行指令碼,可以綜合實施以下兩種方法,或者實施其中的任意一種。
<?php
define
('uploadpath'
,'/var/uplaod');
function
get_upload_file_name
($tofile
)//下面的處理為生成唯一的檔名
$count=0
;//嘗試生成檔名的次數
dowihle
($fp
===false
&&++
$count
<10)
;if($fp
===false
)fclose
($fp);
return
$file
;}
學習過程中筆記的記錄與資料整理。
檔案處理相關C函式
總覽 1.0 int fscanf file stream,const char format,argument waiting for adding 1.0.0 fscanf 函式原型為 int fscanf file stream,const char format,argument 其功能為根...
檔案上傳相關問題
檔案上傳相關問題 1.副檔名的簡單獲取 string strrchr string haystack,mixed needle 在引數haystack中查詢引數needle,找到後,返回之後的字串。2.避免檔名重複 對於同一 的儲存路徑,不同使用者上傳的檔案可能重名,為避免同名檔案相互覆蓋,需給檔案...
檔案路徑相關處理的AP
bool pathisdirectoryempty lpctstr pszpath 判斷目錄是否為空 本來是想自己整理下的,在整理過程中發現有哥們整理過,就轉來此地借過。自己整理的東西delete後就直接copy了。需要標頭檔案 shlwapi.h 其中有一些函式功能存在重複,我在認為比較常用的的函...