日期:2014-05-18  浏览次数:20483 次

验证文件格式
为保证用户上传的格式正确,确保不对网站造成什么危害,除了通过扩展名验证还有别的办法吗?

比如有人把什么恶意文件改成.jpg当成图上传到网站上了怎么办?

------解决方案--------------------
上传保存的路径及文件名一定要注意,不能直接读取客户端的名称。
如果要读取也要过滤好,否则可能会有双点攻击,比如用户把上传文件名改为:../admin/xxx.gif
------解决方案--------------------
给你一段真正验证 文件的代码 而非是通过扩展名

PS:楼上的 如果图片目录 没有设置权限 JPG的就可能成为木马 这个是老早的问题了

后台代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
//清清月儿 http://blog.csdn.net/21aspnet
protected void Page_Load(object sender, EventArgs e)
{

}
protected void bt_upload_Click(object sender, EventArgs e)
{
try
{
if (FileUpload1.PostedFile.FileName == " ")
{
this.lb_info.Text = "请选择文件! ";
}
else
{
string filepath = FileUpload1.PostedFile.FileName;
if (IsAllowedExtension(FileUpload1) == true)
{
string filename = filepath.Substring(filepath.LastIndexOf( "\\ ") + 1);
string serverpath = Server.MapPath( "images/ ") + filename;
FileUpload1.PostedFile.SaveAs(serverpath);
this.lb_info.Text = "上传成功! ";
}
else
{
this.lb_info.Text = "请上传图片 ";
}
}
}
catch (Exception error)
{
this.lb_info.Text = "上传发生错误!原因: " + error.ToString();
}
}
public static bool IsAllowedExtension(FileUpload hifile)
{
System.IO.FileStream fs = new System.IO.FileStream(hifile.PostedFile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
string fileclass = " ";
byte buffer;
try
{
buffer = r.ReadByte();
fileclass = buffer.ToString();
buffer = r.ReadByte();
fileclass += buffer.ToString();

}
catch
{

}
r.Close();
fs.Close();
if (fileclass == "255216 " || fileclass == "7173 ")//说明255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
{
return true;
}
else
{
return false;
}

}

}