加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET文件上传:如何确保上传的文件真的是JPEG?

发布时间:2020-12-16 07:34:03 所属栏目:asp.Net 来源:网络整理
导读:犯罪分子可以伪造他上传的文件的内容类型.所以,如果我通过我的页面在服务器上收到文件,我不能只检查它的MIME类型和文件扩展名.有没有可靠的方法来检查上传的文件实际上是JPEG,GIF还是PNG?我需要拒绝所有其他格式.我可以尝试一点一点地读取文件,但我在寻找什
犯罪分子可以伪造他上传的文件的内容类型.所以,如果我通过我的页面在服务器上收到文件,我不能只检查它的MIME类型和文件扩展名.有没有可靠的方法来检查上传的文件实际上是JPEG,GIF还是PNG?我需要拒绝所有其他格式.我可以尝试一点一点地读取文件,但我在寻找什么?感谢您的任何建议或想法!

解决方法

最简单的方法是检查输入流的标题并查找特定的签名:

> JPEG:十六进制的FF D8
> GIF:前三个字节“GIF”
> PNG:137 80 78 71 13 10 26 10十进制

ASP.NET中的示例

bool isValid = false;
        char[] header = new char[10];
        StreamReader sr = new StreamReader(Request.InputStream);
        sr.Read(header,10);

        // check if JPG
        if (header[0] == 0xFF && header[1] == 0xD8)
        {
            isValid = true;
        }
        // check if GIF
        else if (header[0] == 'G' && header[1] == 'I' && header[2] == 'F')
        {
            isValid = true;
        }
        // check if PNG
        else if (header[0] == 137 && header[1] == 80 && header[2] == 78 && header[3] == 71 && header[4] == 13 && header[5] == 10 && header[6] == 26 && header[7] == 10)
        {
            isValid = true;
        }

当然你必须处理异常

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读