我现在正在构建一个文件管理和上传 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 (我可以访问),但我不知道如何围绕它创建一个黑/白列表。