http圖片上傳安全性問(wèn)題 根據(jù)ContentType (MIME) 判斷其實(shí)不準(zhǔn)確、不安全
圖片上傳常用的類型判斷方法有這么幾種---截取擴(kuò)展名、獲取文件ContentType (MIME) 、讀取byte來(lái)判斷(這個(gè)什么叫法來(lái)著?)。前兩種都有安全問(wèn)題。容易被上傳不安全的文件,如木馬什么的。第1種截取文件擴(kuò)展名來(lái)判斷的方法很明顯不安 全,第2種ContentType MIME可以偽造,所以用ContentType來(lái)判斷其實(shí)也不安全。建議采用第3種。
C#演示:
1.截取擴(kuò)展名來(lái)做判斷,不可取。
if (Request.Files.Count > 0)
{
//這里只測(cè)試上傳第一張圖片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種方案安全。但其實(shí)ContentType是可偽造的,所以也不夠安全。
if (Request.Files.Count > 0)
{
//這里只測(cè)試上傳第一張圖片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.通過(guò)byte獲取文件類型,來(lái)做判斷。
if (Request.Files.Count > 0)
{
//這里只測(cè)試上傳第一張圖片file[0]
HttpPostedFile file0 = Request.Files[0];
//轉(zhuǎn)換成byte,讀取圖片MIME類型 Stream stream;
//int contentLength = file0.ContentLength; //文件長(zhǎng)度byte[] fileByte = newbyte[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,pngif (fileTypeStr.Contains(fileFlag))
{
file0.SaveAs(Server.MapPath("~/" + file0.FileName));
}
else
{
Response.Write("圖片格式不正確:" + fileFlag);
}
}
以上內(nèi)容就是本文給大家敘述的http圖片上傳安全性問(wèn)題 根據(jù)ContentType (MIME) 判斷其實(shí)不準(zhǔn)確、不安全,希望大家喜歡。
相關(guān)文章
C#實(shí)現(xiàn)動(dòng)態(tài)執(zhí)行字符串腳本(優(yōu)化版)的示例代碼
這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)動(dòng)態(tài)執(zhí)行字符串腳本(優(yōu)化版),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03
C#三種方法獲取文件的Content-Type(MIME Type)
這篇文章介紹了C#獲取文件Content-Type(MIME Type)的三種方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
C#使用Directoryinfo類獲得目錄信息和屬性的方法
這篇文章主要介紹了C#使用Directoryinfo類獲得目錄信息和屬性的方法,涉及C#操作目錄的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
C# 中的 is 真的是越來(lái)越強(qiáng)大越來(lái)越語(yǔ)義化(推薦)
這篇文章主要介紹了C# 中的 is 真的是越來(lái)越強(qiáng)大越來(lái)越語(yǔ)義化,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
C#實(shí)現(xiàn)餐飲管理系統(tǒng)完整版
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)餐飲管理系統(tǒng)的完整版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
C#連接db2數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法
本篇文章是對(duì)C#連接db2數(shù)據(jù)庫(kù)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Unity3D Shader實(shí)現(xiàn)掃描顯示效果(2)
這篇文章主要為大家詳細(xì)介紹了Unity3D Shader實(shí)現(xiàn)掃描顯示效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03
Unity3D實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲(2)
這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲的第二部分,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
C#利用Aspose.PDF實(shí)現(xiàn)PDF轉(zhuǎn)EPUB的完整指南
在 .NET 開發(fā)中,Aspose.PDF 是一個(gè)強(qiáng)大的庫(kù),能夠幫助我們處理 PDF 文件的各種任務(wù),包括將 PDF 轉(zhuǎn)換為其他格式,如 EPUB,本文將介紹如何使用 Aspose.PDF 在 C# 中實(shí)現(xiàn)將 PDF 轉(zhuǎn)換為 EPUB 的功能,需要的朋友可以參考下2025-02-02

