ASP.NET通过byte正确安全的判断上传文件格式
程序员文章站
2023-12-17 12:42:46
asp.net中在判断文件格式时,我们以前常用的方法就是通过截取扩展名来做判断,或者通过contenttype (mime) 判断,这两种方法都不太安全,因为这两种方式用户...
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 |