我想限制允許上傳的文件類型爲圖片,pdf和文檔。推薦的方法是什麼?限制允許上傳的文件類型asp.net
我假設僅僅檢查文件擴展名是不夠的,因爲攻擊者可以根據自己的意願更改文件擴展名。
我也想過使用PostedFile.ContentType檢查MIME類型。
我還不知道這是否增加了單獨檢查文件擴展名以及攻擊者是否有能力輕鬆更改這些信息的功能。
這基本上是一個課程管理系統,供學生上傳作業和教師下載和查看它們。
謝謝。
我想限制允許上傳的文件類型爲圖片,pdf和文檔。推薦的方法是什麼?限制允許上傳的文件類型asp.net
我假設僅僅檢查文件擴展名是不夠的,因爲攻擊者可以根據自己的意願更改文件擴展名。
我也想過使用PostedFile.ContentType檢查MIME類型。
我還不知道這是否增加了單獨檢查文件擴展名以及攻擊者是否有能力輕鬆更改這些信息的功能。
這基本上是一個課程管理系統,供學生上傳作業和教師下載和查看它們。
謝謝。
我同意驗證pranay_stacker顯示的擴展名,並檢查PostedFile.ContentType將提供另一層安全性。但是,它仍然依賴於客戶端設置的Content-Type標頭,因此容易受到攻擊。
如果你想保證文件類型,那麼你需要上傳文件並檢查前2個字節。沿(未經測試)東西線
string fileclass = "";
using(System.IO.BinaryReader r = new System.IO.BinaryReader(fileUpload1.PostedFile.InputStream))
{
byte buffer = r.ReadByte();
fileclass = buffer.ToString();
buffer = r.ReadByte();
fileclass += buffer.ToString();
r.Close();
}
if(fileclass!="3780")//.pdf 208207=.doc 7173=.gif 255216=.jpg 6677=.bmp 13780=.png
{
errorLiteral.Text = "<p>Error - The upload file must be in PDF format.</p>"
return;
}
這是非常粗糙,不健壯,希望有人可以擴大這一點。
要確定99%,您必須檢查上傳文件的magic numbers,就像UNIX file
實用程序一樣。
謝謝!這與盧克在上面的帖子中提供的方向類似。讀取前兩個字節足以獲得我需要的神奇數字的信息?這是獨立於平臺的解決方案嗎? – Eran 2010-06-16 14:37:13
這取決於文件類型。有關示例,請參閱鏈接的Wikipedia文章。 – 2010-06-16 14:50:04
'PostedFile.ContentType'的值由攻擊者控制。不要檢查這個變量,這是浪費。 – rook 2010-06-16 18:45:49