ASP.NET中在判斷文件格式時(shí),我們以前常用的方法就是通過(guò)截取擴(kuò)展名來(lái)做判斷,或者通過(guò)ContentType (MIME) 判斷,這兩種方法都不太安全,因?yàn)檫@兩種方式用戶(hù)都可以偽造,從而達(dá)可以攻擊網(wǎng)站,實(shí)現(xiàn)給網(wǎng)站掛馬等目的。
下面介紹通過(guò)byte獲取文件類(lèi)型,來(lái)做判斷的方式
if (Request.Files.Count > 0) { //這里只測(cè)試上傳第一張圖片file[0] HttpPostedFile file0 = Request.Files[0]; //轉(zhuǎn)換成byte,讀取圖片MIME類(lèi)型 Stream stream; //int contentLength = file0.ContentLength; //文件長(zhǎng)度 byte[] fileByte = new byte[2];//contentLength,這里我們只讀取文件長(zhǎng)度的前兩位用于判斷就好了,這樣速度比較快,剩下的也用不到。 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" };//對(duì)應(yīng)的圖片格式j(luò)pg,gif,bmp,png if (fileTypeStr.Contains(fileFlag)) { file0.SaveAs(Server.MapPath("~/" + file0.FileName)); } else { Response.Write("圖片格式不正確:" + fileFlag); } }
常見(jiàn)文件類(lèi)型對(duì)應(yīng)的byte數(shù)據(jù)
199196 | sqlite數(shù)據(jù)庫(kù)文件 |
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 |
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com