有的時候需要檢測上傳檔案的真實類型,才能準確的判斷使用者上傳的檔案是否真的是需要過濾的檔案類型
大多數情況下我們都是用
Path.GetExtension(file.FileName)
擷取檔案的副檔名,然後進行判斷檔案是否是我們需要過濾的檔案,但是這種方法只能得到表面上的副檔名,如果一些惡作劇的使用者故意把 text的檔案更改為
jpg 那麼Path.GetExtension(file.FileName) 擷取到的檔案類型就是 jpg 而不是text
用下面的方法會得到檔案的真實類型
private bool IsAllowedExtension(HttpPostedFile hifile)
{
bool ret = false;
System.IO.FileStream fs = new System.IO.FileStream(hifile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
string fileclass = "";
byte buffer;
try
{
buffer = r.ReadByte();
fileclass = buffer.ToString();
buffer = r.ReadByte();
fileclass += buffer.ToString();
}
catch
{
return false;
}
r.Close();
fs.Close();
/*副檔名說明
*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
*8297 rar
*01 accdb,mdb
*7790 exe,dll
*5666 psd
*255254 rdp
*10056 bt種子
*64101 bat
*/
String[] fileType = { "255216", "7173", "6677", "13780", "8297", "5549", "870", "87111", "8075" };
for (int i = 0; i < fileType.Length; i++)
{
if (fileclass == fileType[i])
{
ret = true;
break;
}
}
return ret;
}