`
niunan
  • 浏览: 721387 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

ASP.NET上传文件对文件类型的高级判断

    博客分类:
  • .NET
阅读更多
以前发过一个.NET上传文件的方法的,不过那个方法中对文件类型的判断只是对后缀名来进行判断的,这样假如我把一个txt文本文件的后缀名改为jpg了也可以上传,这样无意中就造成了安全问题。
刚刚从网上找了个方法,试验了一下,是能够辨认出正确的文件类型的,如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

public partial class niunantest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string str = FileUpload1.PostedFile.ContentType;
        Response.Write("文件类型:"+str);

        string filename = "";

        FileExtension[] fe = { FileExtension.GIF, FileExtension.JPG, FileExtension.PNG };
        if (FileValidation.IsAllowedExtension(FileUpload1, fe))
        {
            string fileExt = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
            Response.Write("<br>验证通过!");
            //filename = "/Images/" + DateTime.Now.ToString("yyyyMMddHHmmss") + fileExt;
            //FileUpload1.PostedFile.SaveAs(Server.MapPath(filename));
        }
        else
        {
            Response.Write( "<br>验证不通过,只支持以下格式的图片:JPG,GIF,PNG");
            return;
        }

    }

    public enum FileExtension
    {
        JPG = 255216,
        GIF = 7173,
        PNG = 13780,
        SWF = 6787,
        RAR = 8297,
        ZIP = 8075,
        _7Z = 55122

        // 255216 jpg;

        // 7173 gif;

        // 6677 bmp,

        // 13780 png;

        // 6787 swf

        // 7790 exe dll,

        // 8297 rar

        // 8075 zip

        // 55122 7z

        // 6063 xml

        // 6033 html

        // 239187 aspx

        // 117115 cs

        // 119105 js

        // 102100 txt

        // 255254 sql 

    }

    public class FileValidation
    {
        public static bool IsAllowedExtension(FileUpload fu, FileExtension[] fileEx)
        {
            int fileLen = fu.PostedFile.ContentLength;
            byte[] imgArray = new byte[fileLen];
            fu.PostedFile.InputStream.Read(imgArray, 0, fileLen);
            MemoryStream ms = new MemoryStream(imgArray);
            System.IO.BinaryReader br = new System.IO.BinaryReader(ms);
            string fileclass = "";
            byte buffer;
            try
            {
                buffer = br.ReadByte();
                fileclass = buffer.ToString();
                buffer = br.ReadByte();
                fileclass += buffer.ToString();
            }
            catch
            {
            }
            br.Close();
            ms.Close();
            foreach (FileExtension fe in fileEx)
            {
                if (Int32.Parse(fileclass) == (int)fe)
                    return true;
            }
            return false;
        }
    }
}

个人理解:上面的代码中判断文件类型的应该是把文件转成二进制的字节,然后取开头2个字节,这样看来的话开头2个字节就表示文件的类型...
分享到:
评论

相关推荐

    asp.net支持多文件上传源码

    在ASP.NET中处理多文件上传是一个常见的需求,尤其是在用户需要上传图片、文档等批量文件的场景下。本文将详细探讨如何在ASP.NET中实现动态多文件上传的功能,并基于源码进行解析。 首先,我们要理解ASP.NET中的...

    ASP.NET在上传文件时对文件类型的高级判断的代码

    5. 文件上传的安全性:除了文件类型的判断之外,***文件上传功能还应当考虑安全性问题,比如对上传文件大小的限制、文件类型过滤、上传路径的安全配置等,确保系统不会因为文件上传而出现安全漏洞。 6. 异常处理:...

    asp.net应用大全.ara打包下载

    本文将深入探讨在ASP.NET中使用的关键知识点,包括水晶报表的使用、JavaScript提示类、分页技术、文件操作以及ASP.NET 2.0中的高级控件——FileUpload控件,以及如何在ASP.NET页面间传递数据。 首先,让我们关注...

    asp.net专家疑难解答200问

    如何在ASP.NET中实现多文件的上传 203. 如何取得指定目录下的文件列表 204.如何在ASP.NET中创建日志文件 205.如何取得系统日志,并把日志信息写到文本文件中 206.如何在ASP.NET中创建、删除、复制...

    asp.net IE6、7、8 图片上传前预览

    实现预览功能时,还要注意安全性问题,比如防止XSS攻击、限制上传文件类型和大小,以及对上传的图片进行安全检查。 综上所述,要实现在ASP.NET中IE6、7、8浏览器上的图片上传预览,需要利用JavaScript和特定的IE...

    ASP.Net程序设计(新) 单元7项目的文件操作.pdf

    总结来说,这个单元涵盖了ASP.NET中与文件和目录操作相关的基础和高级知识,通过学习,开发者能够熟练地处理服务器上的文件和目录,以及实现文件的上传功能,这对于构建功能完善的Web应用程序至关重要。

    ASP.NET源码——[影音娱乐]马克思CMS1.0重复电影检测插件.zip

    【ASP.NET源码——[影音娱乐]马克思CMS1.0重复电影检测插件.zip】是一个专为影音娱乐网站设计的ASP.NET源代码包,主要用于解决电影资源重复上传的问题。这个插件通过先进的算法和技术手段,确保了内容的独特性和管理...

    ASP&C#教程\精通Asp.net2.0+Sql2005项目开发

    示例描述:本章实现了网上选课系统,通过该系统,学校不同角色的用户可以通过网路完成选课系统功能:管理员通过该系统实现对学生、教师、课程的添加和维护和学生成绩的维护;教师通过该系统实现查看课程选修情况和...

    asp.net专家疑难解答200问源码

    202.如何在ASP.NET中实现多文件的上传 203. 如何取得指定目录下的文件列表 204.如何在ASP.NET中创建日志文件 205.如何取得系统日志,并把日志信息写到文本文件中 206.如何在ASP.NET中创建、删除、复制文件 207....

    ASP.NET部分知识效果大全(基金)

    ### ASP.NET部分知识效果大全(基金) #### 一、C/S模式与B/S模式 - **C/S模式**(Client/Server模式): 这种模式下,客户端...以上内容涵盖了ASP.NET开发中的多种常见技术点和控件使用方法,希望对读者有所帮助。

    asp.net图片上传实例

    比如,应当对上传的文件类型进行严格的检查,防止恶意软件上传。此外,由于上传图片会占用服务器的磁盘空间,当需要处理大量图片上传时,可能需要考虑使用专门的文件存储服务或云存储服务,因为本服务器存储大量图片...

    asp.net下结合HttpHandler实现图片防盗链

    ASP.NET 提供了多种机制来实现这一目标,其中一种常用的方法是通过自定义 HttpHandler 来处理特定类型的请求。 #### 一、理解 HttpHandler **HttpHandler** 是 ASP.NET 中用于处理特定 URL 请求的对象。通常情况下...

    文件上传技术资料 关于ASP

    ### 文件上传技术资料关于ASP.NET知识点解析 #### 标题:文件上传技术资料 关于ASP 此标题指明了文档的主要内容是关于ASP中的文件上传技术。ASP(Active Server Pages)是一种服务器端脚本环境,可用于创建动态...

    JavaScript判断FileUpload控件上传文件类型

    JavaScript 提供了一种方法来判断 FileUpload 控件上传的文件类型,这主要依赖于正则表达式来提取文件的扩展名,并进行比较。以下将详细讲解如何实现这一功能。 首先,我们需要了解正则表达式。正则表达式是一种...

    ASPNET文件处理

    ### ASP.NET 文件处理详解 #### 一、文件操作概述 在任何编程技术中,文件操作都是非常基础且重要的功能。ASP.NET作为一种广泛使用的Web应用程序开发框架,利用.NET平台的强大功能为开发者提供了丰富的文件处理...

    aspx探针(两个)

    根据页面的响应,你可以判断服务器是否能够正确解析和执行ASP.NET代码,以及是否存在其他潜在问题。如果页面显示正常且没有错误信息,那么说明ASP.NET环境大致是健康的。 6. 安全注意事项: 虽然探针在开发和调试...

    NeatUplode控件上传

    NeatUpload不仅提供了基本的文件上传功能,还具备了对上传文件大小的智能判断,确保了服务器资源的有效管理和用户操作的合规性。 一、NeatUpload基础 1. **安装与集成**:NeatUpload通常以DLL库的形式提供,开发者...

Global site tag (gtag.js) - Google Analytics