轉載請註明來源: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)!