3

我现在正在构建一个文件管理和上传 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, mpeg, mpg, msc, msp, pcd, pif, rar, reg, scr, sct, vb, vbs, wma, wmf, wmv, wsc, wsf

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

// 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.");
}

这是一个好方法吗?方法不好?我知道一个更理想的方法是检查 MIMEType (我可以访问),但我不知道如何围绕它创建一个黑/白列表。

4

0 回答 0