首頁 後端開發 php教程 PHP漏洞全解(9)-檔案上傳漏洞

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

Dec 22, 2016 am 09:47 AM

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

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何利用Laravel實作檔案上傳與下載功能 如何利用Laravel實作檔案上傳與下載功能 Nov 02, 2023 pm 04:36 PM

如何利用Laravel實作檔案上傳與下載功能

如何在 Golang 中使用 gRPC 實作檔案上傳? 如何在 Golang 中使用 gRPC 實作檔案上傳? Jun 03, 2024 pm 04:54 PM

如何在 Golang 中使用 gRPC 實作檔案上傳?

實作Workerman文件中的文件上傳與下載 實作Workerman文件中的文件上傳與下載 Nov 08, 2023 pm 06:02 PM

實作Workerman文件中的文件上傳與下載

如何解決Java檔案上傳異常(FileUploadException) 如何解決Java檔案上傳異常(FileUploadException) Aug 18, 2023 pm 12:11 PM

如何解決Java檔案上傳異常(FileUploadException)

PHP檔案上傳指南:如何使用move_uploaded_file函數處理上傳文件 PHP檔案上傳指南:如何使用move_uploaded_file函數處理上傳文件 Jul 30, 2023 pm 02:03 PM

PHP檔案上傳指南:如何使用move_uploaded_file函數處理上傳文件

Laravel中的文件上傳和處理:管理用戶上傳的文件 Laravel中的文件上傳和處理:管理用戶上傳的文件 Aug 13, 2023 pm 06:45 PM

Laravel中的文件上傳和處理:管理用戶上傳的文件

用Golang函數簡化檔案上傳處理 用Golang函數簡化檔案上傳處理 May 02, 2024 pm 06:45 PM

用Golang函數簡化檔案上傳處理

如何在 Golang 中實現拖放檔案上傳? 如何在 Golang 中實現拖放檔案上傳? Jun 05, 2024 pm 12:48 PM

如何在 Golang 中實現拖放檔案上傳?

See all articles