时间:2021-07-01 10:21:17 帮助过:8人阅读
ASP.NET中在判断文件格式时,我们以前常用的方法就是通过截取扩展名来做判断,或者通过ContentType (MIME) 判断,这两种方法都不太安全,因为这两种方式用户都可以伪造,从而达可以攻击网站,实现给网站挂马等目的。
下面介绍通过byte获取文件类型,来做判断的方式
- 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);
- }
- }
常见文件类型对应的byte数据
199196 | sqlite数据库文件 |
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 |