ASP.NET通过byte正确安全的判断上传文件格式
2016-05-23 09:47
477 查看
本文介绍一种更安全的方式上传图片,他能有效的防止一些通过修改文件后缀或MIME来伪造的图片的上传,从而保证服务器的安全,希望对大家有所帮助。
ASP.NET中在判断文件格式时,我们以前常用的方法就是通过截取扩展名来做判断,或者通过ContentType (MIME) 判断,这两种方法都不太安全,因为这两种方式用户都可以伪造,从而达可以攻击网站,实现给网站挂马等目的。
下面介绍通过byte获取文件类型,来做判断的方式
常见文件类型对应的byte数据
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 |
相关文章推荐
- windiws server 2008R2 IIS7.5 设置win7 IIS7设置,文件夹权限配置,Authenticated Users,支持asp temp
- 结合Jexus + Kestrel 部署 asp.net core 生产环境
- 结合Jexus + Kestrel 部署 asp.net core 生产环境
- ASP.NET MVC3 如何简单测试 Routes
- ASP.Net 图片压缩
- asp.net MVC Session锁的问题
- ASP.NET Identity 修改表名和主键类型
- ASP.NET新闻发布系统初识
- ASP.Net和ASP的区别
- ASP.NET页面传值加号变空格解决办法
- 如何用ASPxGridView绑定多表关联的查询结果
- Asp.net原理理解(错误,不足继续补充)
- ASP.NET——KindEditor文本编辑器——使用模板页显示异常问题
- Asp.net 面向接口可扩展框架之消息队列组件
- 新版raspbian系统的固定IP配置和启用root账户的ssh登录功能的方法
- 树莓派3无屏幕折腾#附带uart问题解决方案
- 个人使用ASP.NET方法总结
- asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
- 【Asp.Net】——ADO.NET为访问数据插上了翅膀
- 如何给DropDownList控件设置样式(ASP.NET MVC)