以前发过一个.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中的...
5. 文件上传的安全性:除了文件类型的判断之外,***文件上传功能还应当考虑安全性问题,比如对上传文件大小的限制、文件类型过滤、上传路径的安全配置等,确保系统不会因为文件上传而出现安全漏洞。 6. 异常处理:...
本文将深入探讨在ASP.NET中使用的关键知识点,包括水晶报表的使用、JavaScript提示类、分页技术、文件操作以及ASP.NET 2.0中的高级控件——FileUpload控件,以及如何在ASP.NET页面间传递数据。 首先,让我们关注...
如何在ASP.NET中实现多文件的上传 203. 如何取得指定目录下的文件列表 204.如何在ASP.NET中创建日志文件 205.如何取得系统日志,并把日志信息写到文本文件中 206.如何在ASP.NET中创建、删除、复制...
实现预览功能时,还要注意安全性问题,比如防止XSS攻击、限制上传文件类型和大小,以及对上传的图片进行安全检查。 综上所述,要实现在ASP.NET中IE6、7、8浏览器上的图片上传预览,需要利用JavaScript和特定的IE...
总结来说,这个单元涵盖了ASP.NET中与文件和目录操作相关的基础和高级知识,通过学习,开发者能够熟练地处理服务器上的文件和目录,以及实现文件的上传功能,这对于构建功能完善的Web应用程序至关重要。
【ASP.NET源码——[影音娱乐]马克思CMS1.0重复电影检测插件.zip】是一个专为影音娱乐网站设计的ASP.NET源代码包,主要用于解决电影资源重复上传的问题。这个插件通过先进的算法和技术手段,确保了内容的独特性和管理...
示例描述:本章实现了网上选课系统,通过该系统,学校不同角色的用户可以通过网路完成选课系统功能:管理员通过该系统实现对学生、教师、课程的添加和维护和学生成绩的维护;教师通过该系统实现查看课程选修情况和...
202.如何在ASP.NET中实现多文件的上传 203. 如何取得指定目录下的文件列表 204.如何在ASP.NET中创建日志文件 205.如何取得系统日志,并把日志信息写到文本文件中 206.如何在ASP.NET中创建、删除、复制文件 207....
### ASP.NET部分知识效果大全(基金) #### 一、C/S模式与B/S模式 - **C/S模式**(Client/Server模式): 这种模式下,客户端...以上内容涵盖了ASP.NET开发中的多种常见技术点和控件使用方法,希望对读者有所帮助。
比如,应当对上传的文件类型进行严格的检查,防止恶意软件上传。此外,由于上传图片会占用服务器的磁盘空间,当需要处理大量图片上传时,可能需要考虑使用专门的文件存储服务或云存储服务,因为本服务器存储大量图片...
ASP.NET 提供了多种机制来实现这一目标,其中一种常用的方法是通过自定义 HttpHandler 来处理特定类型的请求。 #### 一、理解 HttpHandler **HttpHandler** 是 ASP.NET 中用于处理特定 URL 请求的对象。通常情况下...
### 文件上传技术资料关于ASP.NET知识点解析 #### 标题:文件上传技术资料 关于ASP 此标题指明了文档的主要内容是关于ASP中的文件上传技术。ASP(Active Server Pages)是一种服务器端脚本环境,可用于创建动态...
JavaScript 提供了一种方法来判断 FileUpload 控件上传的文件类型,这主要依赖于正则表达式来提取文件的扩展名,并进行比较。以下将详细讲解如何实现这一功能。 首先,我们需要了解正则表达式。正则表达式是一种...
### ASP.NET 文件处理详解 #### 一、文件操作概述 在任何编程技术中,文件操作都是非常基础且重要的功能。ASP.NET作为一种广泛使用的Web应用程序开发框架,利用.NET平台的强大功能为开发者提供了丰富的文件处理...
根据页面的响应,你可以判断服务器是否能够正确解析和执行ASP.NET代码,以及是否存在其他潜在问题。如果页面显示正常且没有错误信息,那么说明ASP.NET环境大致是健康的。 6. 安全注意事项: 虽然探针在开发和调试...
NeatUpload不仅提供了基本的文件上传功能,还具备了对上传文件大小的智能判断,确保了服务器资源的有效管理和用户操作的合规性。 一、NeatUpload基础 1. **安装与集成**:NeatUpload通常以DLL库的形式提供,开发者...