限制上传asp.net允许的文件类型

时间:2010-06-16 11:55:02

标签: asp.net asp.net-mvc security

我想将允许的上传文件类型限制为图像,pdf和文档。建议的方法是什么?

我认为单独检查文件扩展名是不够的,因为攻击者可以按照自己的意愿更改文件扩展名。

我还考虑过使用PostedFile.ContentType检查MIME类型。

我仍然不知道这是否会增加任何进一步的功能,而不仅仅是检查文件扩展名,以及攻击者是否有能力轻松更改此信息。

这基本上是一个课程管理系统,供学生上传作业和教师下载和查看。

感谢。

2 个答案:

答案 0 :(得分:1)

我同意通过pranay_stacker验证扩展名为show,并且检查PostedFile.ContentType将提供另一层安全性。但是,它仍然依赖于客户端设置的Content-Type标头,因此容易受到攻击。

如果要保证文件类型,则需要上传文件并检查前2个字节。 (未经测试的)

的东西
string fileclass = "";
using(System.IO.BinaryReader r = new System.IO.BinaryReader(fileUpload1.PostedFile.InputStream))
{
    byte buffer = r.ReadByte();
    fileclass = buffer.ToString();
    buffer = r.ReadByte();
    fileclass += buffer.ToString();
    r.Close();
}
if(fileclass!="3780")//.pdf 208207=.doc 7173=.gif 255216=.jpg 6677=.bmp 13780=.png
{
    errorLiteral.Text = "<p>Error - The upload file must be in PDF format.</p>"
    return;
}

这非常粗糙,并且不够健壮,希望有人可以扩展这一点。

答案 1 :(得分:0)

要确保99%,您必须检查上传文件的magic numbers,就像UNIX file实用程序一样。