C# 如何为文件上载应用程序构建黑/白列表?

C# 如何为文件上载应用程序构建黑/白列表?,c#,security,asp.net-mvc-4,whitelist,blacklist,C#,Security,Asp.net Mvc 4,Whitelist,Blacklist,我现在正在构建一个文件管理和上传web应用程序,到目前为止,我很少做的一件事就是针对不安全的文件类型进行安全保护。我一直在网上阅读,试图找到一个好的方法来建立安全性,因为这是我以前从未做过的事情。黑名单和白名单似乎是一个笼统的答案,但我不知道最好的实现方法。我的应用程序是在ASP.net MVC 4中构建的,目前唯一的安全性是: /// Check to see if the file isn't of the appropriate type if (extension == ".asp

我现在正在构建一个文件管理和上传web应用程序,到目前为止,我很少做的一件事就是针对不安全的文件类型进行安全保护。我一直在网上阅读,试图找到一个好的方法来建立安全性,因为这是我以前从未做过的事情。黑名单和白名单似乎是一个笼统的答案,但我不知道最好的实现方法。我的应用程序是在ASP.net MVC 4中构建的,目前唯一的安全性是:

 /// Check to see if the file isn't of the appropriate type

 if (extension == ".asp" || extension == ".exe" || extension == ".js")
 {
     ModelState.AddModelError("fileError", "That filetype is not permitted.");
 }
我已根据该列表禁止以下内容:
ani、asf、asp、avi、bas、bat、bin、chm、cmd、com、cpl、cur、eml、exe、hta、ico、js、jse、midi、mp3、mpa、mpe、mpg、msc、msp、pcd、pif、rar、reg、scr、sct、vb、vbs、wma、wmf、wmv、wsc、wsf

我目前的想法是这样的(半伪代码,所以是的,语法不完整):

//在我的模型中
公共静态bool IsInBlacklist(字符串扩展)
{
字符串[]黑名单=ani、asf、asp、avi、bas、bat、bin、chm、cmd、com、cpl、cur、eml、exe、hta、ico、js、jse、midi、mp3、mpa、mpe、mpg、msc、msp、pcd、pif、rar、reg、scr、sct、vb、vbs、wma、wmf、wmv、wsc、wsf
对于int i=0;i

这是一个好方法吗?糟糕的方法?我知道一个更理想的方法是对照MIMEType(我有权访问它)进行检查,但我不知道如何围绕它创建一个黑/白列表。

这不是一个好主意,例如,他们可以将其命名为
.exe.removethis
,这样就不会通过黑名单。白名单更好,但是MIMEType甚至更好。好的一点是newStackExchangeInstance…我没有想到这一点。在PHP中,我使用一个库来读取文件并根据标题内容报告其类型。它能够读取100多种文件类型,从中我只允许我想要的少数文件类型。其他所有内容都被拒绝,但文件名被忽略。
// in my model
public static bool IsInBlacklist(string extension)
{
    string[] blacklist = ani, asf, asp, avi, bas, bat, bin, chm, cmd, com, cpl, cur, eml, exe, hta, ico, js, jse, midi, mp3, mpa, mpe, mpeg, mpg, msc, msp, pcd, pif, rar, reg, scr, sct, vb, vbs, wma, wmf, wmv, wsc, wsf
    for int i = 0; i < blacklist.length(); i++
        if extension == blacklist[i]
            return true
        return false
}

// in my controller
if (IsInBlacklist(extension))
{
    ModelState.AddModelError("fileError", "That filetype is not permitted.");
}