我想让用户将图像和视频上传到我的网站。通常,我会检查图像扩展是否为jpg
或png
扩展。但我通过上传一个shell来破解它来测试我的网络的安全性,所以我把shell的扩展名改为.jpg
。
遗憾的是,它已经正常上传到主机的文件夹,并显示了我的所有文件,所以如果有人知道在以C#
Asp.net
web表单上传到主机之前,确保这个文件是视频或这个文件是真实图像的最佳方法的话。
我想分享上传文件之前获取文件类型/内容类型的最简单方法。
string file_type;
var provider = new FileExtensionContentTypeProvider();
if(!provider.TryGetContentType(finlename, out file_type))
{
file_type = "application/octet-stream";
}
您可以检查文件的内容类型。以下代码可能会有所帮助:
public static readonly string[] mimeTypes = new[] { "image/jpeg", "image/png" };
if (mimeTypes.Contains(fileBox.PostedFile.ContentType))
{ // Do something.
}
此外,我建议客户端验证。这将有助于在发布到服务器之前检查内容类型。这也将有助于节省带宽。
以下链接应能帮助您:
如何在上传前用javascript检查文件MIME类型?
不仅是文件扩展名,检查mime类型的"images/jpeg,images/png,images/gif"也是一种方法。
您可以验证文件的扩展名。使用此代码。
protected void ValidateFile(IFormFile file)
{
if (file == null)
throw new Filters.ApiException(this.Localizer[string.Format(ErrorConst.SelectFile)].Value, 400);
if (file.Length < 1)
throw new Filters.ApiException(this.Localizer[string.Format(ErrorConst.ErrorImageSize)].Value, 400);
int filesize = 3;
string[] supportedTypes = new[] { "jpg", "jpeg", "png", "bmp" };
var fileExt = System.IO.Path.GetExtension(file.FileName).Substring(1);
if (!supportedTypes.Contains(fileExt))
throw new Filters.ApiException(this.Localizer[ErrorConst.ErrorImageExtension].Value, 400);
if (file.Length > (filesize * 1024 * 1024))
throw new Filters.ApiException(this.Localizer[string.Format(ErrorConst.ErrorImageSize, filesize)].Value, 400);
}
这是经过验证的文件和文件大小。
谢谢。