问题描述
在ASP.NET Core 2.2应用程序中,我可以上传ZIP文件。 ZIP文件的内容被提取并保存在目录中。但是,在将文件保存到服务器上之前,我想检查它们的MIME类型(也就是内容类型),以确保它们都不是要存储的潜在危险文件,例如EXE。如果ZIP文件包含不需要的文件,我只想在页面上显示模型错误。
在将ZIP文件存储在目录中之后,我试图遍历zip文件中的文件以检查其MIME类型。使用此方法,虽然我可以看到带有扩展名的文件名,但看不到MIME类型。单独使用扩展名不是一个好主意,因为它可以被欺骗。
Directory.GetFiles(directory,"*.zip",SearchOption.TopDirectoryOnly).ToList()
.ForEach(zipFilePath =>
{
using (FileStream zipToOpen = new FileStream(zipFilePath,FileMode.Open))
{
using (ZipArchive archive = new ZipArchive(zipToOpen,ZipArchiveMode.Read))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
//entry does not contain MIME type,only filename with extension
}
}
}
});
另一种解决方案是将文件夹的权限设置为拒绝执行,但我不想这样做,因为这很容易忘记。
最后,有一种方法可以将文件存储在App_Data文件夹中,该文件夹不公开,因此无法直接执行其中的文件。问题是我找不到这样的文件夹。它似乎不是使用我的应用程序自动创建的。我认为这一定是ASP.NET和ASP.NET Core之间的区别。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)