我想让用户将图像和视频上传到我的网站。通常,我会检查图像扩展名是否为jpg
或png
扩展名。但是我通过上传一个外壳来对其进行黑客攻击来测试Web的安全性,因此我将外壳的扩展名更改为.jpg
。
可悲的是,它已正常上载到主机的文件夹并显示了我的所有文件,因此,如果有人知道在将该文件上载到主机之前,最好先确保该文件是视频或此文件是真实图像, {1}} C#
网络表单。
答案 0 :(得分:1)
您可以验证文件的扩展名。 使用此代码。
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);
}
这是经过验证的文件和文件大小。
谢谢。
答案 1 :(得分:1)
我想分享在上传文件之前获取文件类型/内容类型的最简单方法。
string file_type;
var provider = new FileExtensionContentTypeProvider();
if(!provider.TryGetContentType(finlename, out file_type))
{
file_type = "application/octet-stream";
}
答案 2 :(得分:0)
您可以检查文件的内容类型。以下代码可能会有所帮助:
public static readonly string[] mimeTypes = new[] { "image/jpeg", "image/png" };
if (mimeTypes.Contains(fileBox.PostedFile.ContentType))
{ // Do something.
}
此外,我建议进行客户端验证。这将有助于在发布到服务器之前检查内容类型。这也将有助于节省带宽。
以下链接应为您提供帮助:
How to check file MIME type with javascript before upload?
不仅要使用文件扩展名,还要检查“ image / jpeg,image / png,image / gif”的mime类型。