ASP.NET通過byte正確安全的判斷上傳文件格式


本文介紹一種更安全的方式上傳圖片,他能有效的防止一些通過修改文件后綴或MIME來偽造的圖片的上傳,從而保證服務器的安全,希望對大家有所幫助。

ASP.NET中在判斷文件格式時,我們以前常用的方法就是通過截取擴展名來做判斷,或者通過ContentType (MIME) 判斷,這兩種方法都不太安全,因為這兩種方式用戶都可以偽造,從而達可以攻擊網站,實現給網站掛馬等目的。

下面介紹通過byte獲取文件類型,來做判斷的方式

if (Request.Files.Count > 0)
{
  //這里只測試上傳第一張圖片file[0]
  HttpPostedFile file0 = Request.Files[0];
     
  //轉換成byte,讀取圖片MIME類型
  Stream stream;
  //int contentLength = file0.ContentLength; //文件長度
  byte[] fileByte = new byte[2];//contentLength,這里我們只讀取文件長度的前兩位用於判斷就好了,這樣速度比較快,剩下的也用不到。
  stream = file0.InputStream;
  stream.Read(fileByte, 0, 2);//contentLength,還是取前兩位
  stream.Close();
     
  string fileFlag = "";
  if (fileByte != null && fileByte.Length > 0)//圖片數據是否為空
  {
    fileFlag = fileByte[0].ToString() + fileByte[1].ToString();         
  }
  string[] fileTypeStr = { "255216", "7173", "6677", "13780" };//對應的圖片格式jpg,gif,bmp,png
  if (fileTypeStr.Contains(fileFlag))
  {
    file0.SaveAs(Server.MapPath("~/" + file0.FileName));
  }
  else
  {
    Response.Write("圖片格式不正確:" + fileFlag);
  }
}

常見文件類型對應的byte數據

199196 sqlite數據庫文件
7076 flv視頻文件
6787 swf視頻文件
7173 gif
255216 jpg
13780 png
6677 bmp
239187 txt,aspx,asp,sql
208207 xls.doc.ppt
6063 xml
6033 htm,html
4742 js
8075 xlsx,zip,pptx,mmap,zip,docx
8297 rar
01 accdb,mdb
7790 exe,dll
5666 psd
255254 rdp
10056 bt種子
64101 bat
255254 csv
3780 pdf


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM