首頁  >  文章  >  後端開發  >  PHP漏洞全解(9)-檔案上傳漏洞

PHP漏洞全解(9)-檔案上傳漏洞

黄舟
黄舟原創
2016-12-22 09:47:541769瀏覽

轉載請註明來源:PHP漏洞全解(九)-文件上傳漏洞

一套web應用程序,一般都會提供文件上傳的功能,方便來訪者上傳一些文件。

下面是一個簡單的文件上傳表單


 


 

 

 

form> 


php的設定檔php.ini,其中選項upload_max_filesize指定允許上傳的檔案大小,預設為2M

$_FILES陣列一個數組。如果上傳test.txt,那麼$_FILES數組的內容為:


$FILES 
Array 

[file] => Array 

[file] => Arraytype 🠎 ] => text/plain //MIME類型 
[tmp_name] => /tmp/php5D.tmp //臨時檔案 
[error] => 0 //錯誤訊息資料
[size] 位元組 


如果上傳檔案按鈕的name屬性值為file

 

那麼使用$_FILES['來取得客戶端上傳檔案名稱,不包含路徑。使用$_FILES['file']['tmp_name']來取得服務端保存上傳檔案的暫存檔案路徑

存放上傳檔案的資料夾

PHP不會直接將上傳檔案放到網站根目錄中,而是儲存為一個臨時文件,名稱就是$_FILES['file']['tmp_name']的值,開發者必須把這個臨時文件複製到存放的網站資料夾中。

$_FILES['file']['tmp_name']的值是由PHP設定的,與檔案原始名稱不一樣,開發者必須使用$_FILES['file']['name']來取得上傳檔案的原始名稱。

上傳檔案時的錯誤訊息

$_FILES['file']['error']變數用來儲存上傳檔案時的錯誤訊息,它的值如下:

錯誤訊息錯誤訊息說明UPLOAD_ERR_OK0沒有錯誤UPLOAD_ERR_INI_SIZE _ERR_FROM_SIZE2上傳檔案的大小超過HTML表單中MAX_FILE_SIZE的值UPLOAD_ERR_PARTIAL3只上傳部分的檔案

檔案上傳漏洞

如果提供給網站訪客上傳圖片的功能,那必須小心訪客上傳的實際可能不是圖片,而是可以指定的PHP程式。如果存放圖片的目錄是開放的資料夾,則入侵者就可以遠端執行上傳的PHP檔案來進行攻擊。

下面有一個簡單的檔案上傳範例:




php 
// 設定上傳檔案的目錄 
$uploaddir = "D:/www/imao/"; ($_FILES['file1'])) 

// 要放在網站目錄中完整的路徑,包含檔案名稱 
$uploadfile = $uploaddir . $_FILES['file1']['name']; / 將伺服器存放的路徑,移到真實檔案名稱 
move_uploaded_file($_FILES['file1']['tmp_name'], $uploadfile); 

?> 
… "multipart/form-data" name="form1"> 

 
 
form> 




這個例子沒有檢驗文件後錯綴,可以上傳任意文件,很明顯的上述所有以上。解(九)-檔案上傳漏洞的內容,更多相關內容請關注PHP中文網(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn