檔案上傳-不過濾+MIME

來源:互聯網
上載者:User

標籤:text   位元組   尾碼   file   錯誤   客戶   jpeg   code   content   

 寫檔案上傳的漏洞代碼的時候,需要對$_FILES數組有一些瞭解: https://wenku.baidu.com/view/10496f95dd88d0d233d46aa6.html

①  這是一個簡單的檔案上傳(寫這個本來是為了熟悉一下語句,然後都寫了,我還是想讓他出場),傳一個php尾碼的看能不能成功,隨便試了一下,成功了,

 

 

檢查一下是不是成功了

 

 

②  :這個是檔案類型過濾的(寫的時候,是只允許image/jpeg通過的)

首先嘗試直接上傳php尾碼的是不行的,經過實驗,發現是MIME驗證,抓包,改一下CONTENT-TYPE ,emmm,就是下面這樣

 

 

 

 

 

 

 

 代碼①:

 1 <html>   2 <head>   3     <title>uploadfiletest</title>   4 </head>   5 <meta http-equiv="content-type" content="text/html";charset="utf-8">   6 <body>   7 <form action="" enctype="multipart/form-data" method="POST" name="uploadfile">   8     上傳檔案: <input type="file" name="upfile" />   9     <input type="submit" value="upload" name="submit">  10 </form>  11 </body>  12 </html>  13 <!-- 完全沒有過濾,任意檔案上傳 -->  14 <?php  15 if (isset($_POST[‘submit‘])) {  16     echo "檔案名稱:".$_FILES[‘upfile‘][‘name‘]."<br />";  17     echo "檔案大小:".$_FILES[‘upfile‘][‘size‘]."<br />";  18     echo "檔案類型:".$_FILES[‘upfile‘][‘type‘]."<br />";  19     echo "臨時路徑:".$_FILES[‘upfile‘][‘tmp_name‘]."<br />";  20     echo "上傳後系統傳回值:".$_FILES[‘upfile‘][‘error‘]."<br />";  21     echo "====================儲存分割線========================<br />";  22     if ($_FILES[‘upfile‘][‘error‘] == 0) {  23         if (!is_dir("./upload")) {  24             mkdir("./upload");  25         }  26         $dir = "./upload/".$_FILES[‘upfile‘][‘name‘];  27         move_uploaded_file($_FILES[‘upfile‘][‘tmp_name‘],$dir);  28         echo "檔案儲存路徑:".$dir."<br />";  29         echo "上傳成功...<br />";  30         31     }  32 }  33  ?>  

 

 

 代碼②:

 1  <html>   2     <head>   3         <title>uploadfile</title>   4     </head>   5     <meta http-equiv="content-type" content="text/html";charset="utf-8">   6  7     <body>   8     <form action="" enctype="multipart/form-data" method="POST" name="uploadfile">   9         上傳檔案: <input type="file" name="upfile" />  10         <input type="submit" value="upload" name="submit">  11     </form>  12     </body>  13     </html>  14 15     <!-- 按檔案類型過濾 -->  16     <?php  17     if (isset($_POST[‘submit‘])) {  18     19       /*  echo "檔案名稱:".$_FILES[‘upfile‘][‘name‘]."<br />";  20         echo "檔案大小:".$_FILES[‘upfile‘][‘size‘]."<br />";  21         echo "檔案類型:".$_FILES[‘upfile‘][‘type‘]."<br />";  22         echo "臨時路徑:".$_FILES[‘upfile‘][‘tmp_name‘]."<br />";  23         echo "上傳後系統傳回值:".$_FILES[‘upfile‘][‘error‘]."<br />";  24         echo "===========================================<br />";  */25         $flag = 0;  26         switch ($_FILES[‘upfile‘][‘type‘]) {  27             case ‘image/jpeg‘:  28                 $flag = 1;  29                 break;  30             default:  31                 die("檔案類型錯誤.....");  32                 break;  33         }  34         if ($_FILES[‘upfile‘][‘error‘] == 0 && $flag ) {  35             if (!is_dir("./upload")) { //如果檔案名稱存在並且為目錄則返回 TRUE。 36                 mkdir("./upload");  37             }  38         $dir = "./upload/".$_FILES[‘upfile‘][‘name‘];  39         move_uploaded_file($_FILES[‘upfile‘][‘tmp_name‘],$dir);  40         echo "檔案儲存路徑:".$dir."<br />";  41             echo "上傳成功...<br />";  42         }  43     }  44      ?>  

 

心得:

1.表單中 enctype="multipart/form-data " 的意思,是設定表單的 MIME 編碼。預設情況,這個編碼格式是application/x-www-form-urlencoded,不能用於檔案上傳;只有使用了 multipart/form-data ,才能完整的傳遞檔案資料,進行下面的操作

 2.$_FILES數組的運用:

$_FILES[‘upFile‘][‘name‘] 用戶端檔案的原名稱       

$_FILES[‘upFile‘][‘type‘] 檔案的 MIME類型,需要瀏覽器提供該資訊的支援,例如"image/gif"       

$_FILES[‘upFile‘][‘size‘] 已上傳檔案的大小,單位為位元組       

$_FILES[‘upFile‘][‘tmp_name‘] 檔案被上傳後在服務端儲存的臨時檔案名稱,一般是系統預設,可以在php.ini的upload_tmp_dir指定,但用 putenv() 函數設定是不起作用的     

$_FILES[‘upFile‘][‘error‘] 和該檔案上傳相關的錯誤碼,[‘error‘] 是在 PHP 4.2.0版本中增加的,下面是它的說明:(它們在PHP3.0以後成了常量)

UPLOAD_ERR_OK 值:0; 沒有錯誤發生,檔案上傳成功

UPLOAD_ERR_INI_SIZE 值:1; 上傳的檔案超過了 php.ini 中 upload_max_filesize選項限制的值           

UPLOAD_ERR_FORM_SIZE 值:2;上傳檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值       

UPLOAD_ERR_PARTIAL 值:3; 檔案只有部分被上傳                 

UPLOAD_ERR_NO_FILE 值:4;沒有檔案被上傳, 值:5; 上傳檔案大小為0

檔案上傳-不過濾+MIME

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.