如何有效的限制上传文件类型
类别:编程学习 浏览量:2706
时间:2013-7-10 如何有效的限制上传文件类型
如何有效的限制上传文件类型在上传文件过程中,可以通过修改扩展名来逃过文件类型的判断并实现上传,就需要可以验证究竟是什么文件,下面介绍几种限制上传文件类型的几种方法与区别。
一、非常不安全的限制文件类型的方法,只能从表面上进行限制:
//限制文件后缀名:
if(Path.GetExtension(sFilePath) != ".zip")
{
Label2.Text = "本应用程序只允许上传zip格式的文件,请重新选择!";
Return;
}
这时如果上传后缀名不是zip的文件,就会发现文件无法上传了。不过,这并表示我们就不能把上传其他格式的文件了。其实,如果在上传前,事先把文件后缀名改成zip,上面这段代码就失去作用了。
二、判断客户端发送的文件的 MIME (注一)内容类型,来进行限制,不过这个MIME也是可以修改的,而且每个浏览器对于不同的文件的MIME或许有差异,不好控制:
//通过文章的MIME信息进行限制:
if(File1.PostedFile.ContentType != "application/zip")
{
Label2.Text = "本应用程序只允许上传zip格式的文件,请重新选择!";
return;
}
三、根据文件类型的编码来进行限制,能很好的对上传的文件类型进行限制,个人推荐使用这种方式:
//例如:限制图片类型,其中: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();
标签:限制上传文件类型
热门推荐
- mysql索引失效的几种情况(Mysql 5.6 "隐式转换"导致的索引失效和数据不准确的问题)
- 云服务器和VPS有什么区别?(云服务器和VPS有什么区别?)
- sqlserver新建连接服务器卡住(SQL Server成功与服务器建立连接但是在登录过程中发生错误的快速解决方案)
- 常用SQL查询语句
- vue elementui 按钮样式修改(vue+elementui 实现新增和修改共用一个弹框的完整代码)
- windows安全策略设置sqlserver(SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7Administrator 的信)
- php中如何使用缓存(PHP使用OB缓存实现静态化功能示例)
- selenium是否登录成功(使用selenium模拟登录解决滑块验证问题的实现)
- phpsetcookie参数说明(PHP的cookie与session原理及用法详解)
- laravel框架入门项目(在laravel框架中使用model层的方法)