現在、ファイル管理とアップロードの Web アプリケーションを構築していますが、これまでほとんど行っていないことの 1 つは、安全でないファイル タイプに対するセキュリティです。私はこれまで行ったことがないため、セキュリティを組み込むための良い方法を見つけようとして、オンラインで読んでいます。ブラックリストとホワイトリストは包括的な答えのようですが、それを実装する最良の方法はわかりません. 私のアプリケーションは 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 (アクセスできる) をチェックすることだとわかっていますが、その周りにブラック/ホワイト リストを作成する方法がわかりません。