如何有效的限制上传文件类型

来源:互联网 发布:js 时分秒 时间选择器 编辑:程序博客网 时间:2024/05/14 10:20
本文导读:通常,为了防止因用户上传有害文件(如木马、黑客程序)引发的安全性问题,Web程序都会对用户允许上传的文件类型加以限制。

        在上传文件过程中,可以通过修改扩展名来逃过文件类型的判断并实现上传,就需要可以验证究竟是什么文件,下面介绍几种限制上传文件类型的几种方法与区别。

         一、非常不安全的限制文件类型的方法,只能从表面上进行限制:

 
C# 代码   复制
//限制文件后缀名:if(Path.GetExtension(sFilePath) != ".zip"){   Label2.Text = "本应用程序只允许上传zip格式的文件,请重新选择!";   Return;}

        这时如果上传后缀名不是zip的文件,就会发现文件无法上传了。不过,这并表示我们就不能把上传其他格式的文件了。其实,如果在上传前,事先把文件后缀名改成zip,上面这段代码就失去作用了。

       二、判断客户端发送的文件的 MIME (注一)内容类型,来进行限制,不过这个MIME也是可以修改的,而且每个浏览器对于不同的文件的MIME或许有差异,不好控制:

 
C# 代码   复制
//通过文章的MIME信息进行限制:if(File1.PostedFile.ContentType != "application/zip"){  Label2.Text = "本应用程序只允许上传zip格式的文件,请重新选择!";    return;}

       三、根据文件类型的编码来进行限制,能很好的对上传的文件类型进行限制,个人推荐使用这种方式:

 
C# 代码   复制
       //例如:限制图片类型,其中:jpg,jpeg,gif,bmp,png//分别的类型编码为: 255216,7173,6677,13780//byte[] file: 上传的文件集合//byte[] strExtensionValue: 限制的文件类型编码集public static bool IsAllowedUpfileType(byte[] fileList,string strValue){            bool bReturn = false;            string fileclass = "";            byte buffer;            try            {                buffer = file[0];                fileclass = buffer.ToString();                buffer = file[1];                fileclass += buffer.ToString();            }            catch { }            string[] allowedExtensions = strExtensionValue.Split(',');            for (int i = 0; i < allowedExtensions.Length; i++)            {                if (fileclass == allowedExtensions[i])                {                    bReturn = true;                    break;                }            }            return bReturn;}//调用:byte[] file = new Byte[FileData.ContentLength];Stream fsRead = FileData.InputStream;fsRead.Read(file, 0, FileData.ContentLength);bool bIsAllowed= IsAllowedUpfileType(file, "255216,7173,6677,13780");fsRead.Flush();fsRead.Close();
0 0
原创粉丝点击