我允许将文件上传到我的 C# MVC 网站,目前我正在根据扩展名限制这些类型,但我也觉得我需要服务器端检查以确认他们没有重命名它。
有没有一种技术可以用来检查我需要的所有类型,或者我可以使用的库可以在这里提供帮助?
我见过有人检查文件的前几个字节,但我害怕我会错过什么?
谢谢你的帮助。
编辑:
这里有很多建议。我将调查其中一些作为解决方案。
我允许将文件上传到我的 C# MVC 网站,目前我正在根据扩展名限制这些类型,但我也觉得我需要服务器端检查以确认他们没有重命名它。
有没有一种技术可以用来检查我需要的所有类型,或者我可以使用的库可以在这里提供帮助?
我见过有人检查文件的前几个字节,但我害怕我会错过什么?
谢谢你的帮助。
编辑:
这里有很多建议。我将调查其中一些作为解决方案。
如果您将文件作为 HttpPostedFile 读取,则可以获得等于 mime 类型的内容类型。
因此,您可以执行以下操作:
if (myFile.ContentType == "video/mpeg")
{
// Do your thing
}
else{
// error
}
试试这个解决方案:使用 .NET,如何根据文件签名而不是扩展名找到文件的 mime 类型
它将为您进行文件内容嗅探。
我最终从这里混合了一些解决方案,因为我没有使用 HttpFileBase 并且只有文件流,我必须读取流的前几个字节以确定 mime 类型。
注意:我不使用注册表技术,因为我不知道服务器上将安装或不会安装什么。
您可以通过以下方式获取 MIME 类型:
var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
mimeType = file.ContentType;
一旦获得 MIME 类型,就可以与字符串比较进行比较(如 @ffffff01 所示)
为了更安全,您还可以使用ffffff01 所说的ContentType属性检查 mimeType,以及使用Path.GetExtension方法检查文件扩展名。