http圖片上傳安全性問題 根據(jù)ContentType (MIME) 判斷其實不準(zhǔn)確、不安全
圖片上傳常用的類型判斷方法有這么幾種---截取擴(kuò)展名、獲取文件ContentType (MIME) 、讀取byte來判斷(這個什么叫法來著?)。前兩種都有安全問題。容易被上傳不安全的文件,如木馬什么的。第1種截取文件擴(kuò)展名來判斷的方法很明顯不安 全,第2種ContentType MIME可以偽造,所以用ContentType來判斷其實也不安全。建議采用第3種。
C#演示:
1.截取擴(kuò)展名來做判斷,不可取。
if (Request.Files.Count > 0) { //這里只測試上傳第一張圖片file[0] HttpPostedFile file0 = Request.Files[0]; string ext = file0.FileName.Substring(file0.FileName.LastIndexOf('.') + 1);//文件擴(kuò)展名string[] fileTypeStr = { "jpg", "gif", "bmp", "png" }; if (fileTypeStr.Contains(ext)) { file0.SaveAs(Server.MapPath("~/" + file0.FileName));//保存文件 } else { Response.Write("圖片格式不正確" + ext); } }
2.判斷ContentType (MIME) ,比第1種方案安全。但其實ContentType是可偽造的,所以也不夠安全。
if (Request.Files.Count > 0) { //這里只測試上傳第一張圖片file[0] HttpPostedFile file0 = Request.Files[0]; string contentType = file0.ContentType;//文件類型string[] fileTypeStr = { "image/gif","image/x-png","image/pjpeg","image/jpeg","image/bmp"}; if (fileTypeStr.Contains(contentType)) { file0.SaveAs(Server.MapPath("~/" + file0.FileName)); } else { Response.Write("圖片格式不正確" + contentType); } }
3.通過byte獲取文件類型,來做判斷。
if (Request.Files.Count > 0) { //這里只測試上傳第一張圖片file[0] HttpPostedFile file0 = Request.Files[0]; //轉(zhuǎn)換成byte,讀取圖片MIME類型 Stream stream; //int contentLength = file0.ContentLength; //文件長度byte[] fileByte = newbyte[2];//contentLength,這里我們只讀取文件長度的前兩位用于判斷就好了,這樣速度比較快,剩下的也用不到。 stream = file0.InputStream; stream.Read(fileByte, 0, 2);//contentLength,還是取前兩位 stream.Close(); string fileFlag = ""; if (fileByte != null && fileByte.Length > 0)//圖片數(shù)據(jù)是否為空 { fileFlag = fileByte[0].ToString() + fileByte[1].ToString(); } string[] fileTypeStr = { "255216", "7173", "6677", "13780" };//對應(yīng)的圖片格式j(luò)pg,gif,bmp,pngif (fileTypeStr.Contains(fileFlag)) { file0.SaveAs(Server.MapPath("~/" + file0.FileName)); } else { Response.Write("圖片格式不正確:" + fileFlag); } }
以上內(nèi)容就是本文給大家敘述的http圖片上傳安全性問題 根據(jù)ContentType (MIME) 判斷其實不準(zhǔn)確、不安全,希望大家喜歡。
欄 目:C#教程
下一篇:C#中DataGridView動態(tài)添加行及添加列的方法
本文標(biāo)題:http圖片上傳安全性問題 根據(jù)ContentType (MIME) 判斷其實不準(zhǔn)確、不安全
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6963.html
您可能感興趣的文章
- 01-10C#實現(xiàn)打開畫圖的同時載入圖片、最大化顯示畫圖窗體的方法
- 01-10C#編程獲取資源文件中圖片的方法
- 01-10C#將圖片存放到SQL SERVER數(shù)據(jù)庫中的方法
- 01-10C#操作數(shù)據(jù)庫中存取圖片文件的方法
- 01-10C#遍歷文件夾后上傳文件夾中所有文件錯誤案例分析
- 01-10C#圖片處理3種高級應(yīng)用
- 01-10Silverlight文件上傳下載實現(xiàn)方法(下載保存)
- 01-10c#實現(xiàn)識別圖片上的驗證碼數(shù)字
- 01-10C#實現(xiàn)附件上傳和下載功能
- 01-10Silverlight將圖片轉(zhuǎn)換為byte的實現(xiàn)代碼


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻 器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10C#中split用法實例總結(jié)
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個骰子