如何保证上传文件的安全
我所能知道的就是:1、检查文件后缀名;2、检查mime类型。
但据说后缀和MIME都可以改。
那什么才安全呢?
大家通常是怎么做的呢?
其实我更感兴趣的是,上传的恶意文件,是如何干坏事的,呵呵。有哪位高手能指点一二,就先谢过了。
------解决方案--------------------
mime是可以改,但改了正常运行应该有问题,除非是文本,不需要直接运行的,
一般上传的是一些js脚本,或后台脚本程序如asp等...
------解决方案--------------------强烈建议lz去学黑客。呵呵
------解决方案--------------------
程序都检验完了还没有办法的话
就采用上传成功之后马上调用杀毒软件对上传文件检测
这是最后一个办法
------解决方案--------------------
------解决方案--------------------我到挺佩服黑客的,\(^o^)/~
------解决方案--------------------
以前网上找的,没有试过你可以试一下可行否
检测真实的文件类型函数:
private bool IsAllowedExtension(HttpPostedFile hifile)
{
bool ret = false;
System.IO.FileStream fs = new System.IO.FileStream(hifile.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
{
return false;
}
r.Close();
fs.Close();
/*文件扩展名说明
*7173 gif
*255216 jpg
*13780 png
*6677 bmp
*239187 txt,aspx,asp,sql
*208207 xls.doc.ppt
*6063 xml
*6033 htm,html
*4742 js
*8075 xlsx,zip,pptx,mmap,zip
*8297 rar
*01 accdb,mdb
*7790 exe,dll
*5666 psd
*255254 rdp
*10056 bt种子
*64101 bat
*/
String[] fileType = { "255216", "7173", "6677", "13780", "8297", "5549", "870", "87111", "8075" };
for (int i = 0; i < fileType.Length; i++)
{
if (fileclass == fileType[i])
{
ret = true;
break;
}
}
return ret;
}