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