Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c中确定上传的文件类型#_C#_Asp.net_Image_Security_File Upload - Fatal编程技术网

C# 如何在c中确定上传的文件类型#

C# 如何在c中确定上传的文件类型#,c#,asp.net,image,security,file-upload,C#,Asp.net,Image,Security,File Upload,我想让用户上传图片和视频到我的网站。通常我会检查图像扩展名是否为jpg或png扩展名。但是我通过上传一个shell来测试我的web的安全性,所以我将shell的扩展名改为.jpg 遗憾的是,它已正常上载到主机文件夹并显示我的所有文件,因此,如果有人知道在以C#Asp.netweb表单将其上载到主机之前确保该文件是视频或真实图像的最佳方法。您可以检查该文件的内容类型。以下代码可能会有所帮助: public static readonly string[] mimeTypes = new[] { "

我想让用户上传图片和视频到我的网站。通常我会检查图像扩展名是否为
jpg
png
扩展名。但是我通过上传一个shell来测试我的web的安全性,所以我将shell的扩展名改为
.jpg


遗憾的是,它已正常上载到主机文件夹并显示我的所有文件,因此,如果有人知道在以
C#
Asp.net
web表单将其上载到主机之前确保该文件是视频或真实图像的最佳方法。

您可以检查该文件的内容类型。以下代码可能会有所帮助:

public static readonly string[] mimeTypes = new[] { "image/jpeg", "image/png" };

if (mimeTypes.Contains(fileBox.PostedFile.ContentType))
{ // Do something.    
}
另外,我建议客户端验证。这将有助于在发布到服务器之前检查内容类型。这也有助于节省带宽

以下链接应该可以帮助您:


不仅要检查文件扩展名,还要检查mime类型中的“image/jpeg、image/png、image/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);
    }
受保护的void ValidateFile(ifformfile)
{
if(file==null)
抛出新的Filters.ApiException(this.Localizer[string.Format(ErrorConst.SelectFile)].Value,400);
if(file.Length<1)
抛出新的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);
如果(!supportedTypes.Contains(fileExt))
抛出新的Filters.ApiException(this.Localizer[ErrorConst.ErrorImageExtension].Value,400);
如果(file.Length>(文件大小*1024*1024))
抛出新的Filters.ApiException(this.Localizer[string.Format(ErrorConst.ErrorImageSize,filesize)].Value,400);
}
这是经过验证的文件和文件大小


谢谢。

我想分享上传文件前获取文件类型/内容类型的最简单方法

            string file_type;
            var provider = new FileExtensionContentTypeProvider();
            if(!provider.TryGetContentType(finlename, out file_type))
            {
                file_type = "application/octet-stream";
            }

因此,您希望允许用户将jpg或png文件上载到您的网站,但不允许用户上载伪造的或间接键入的或格式化的文件。我猜您最好的办法是获得一个图像解析器,您信任该解析器的代码来尝试加载该文件并查看其是否成功。如果您有妄想症,请使用锁定权限。查看实际答案。此外,来自@Flydog57的注释是一种可行的方法,如果可以将其解析为图像,那么它就是图像。这是否回答了您的问题?请注意,这不会检查客户端无法设置的任何内容,因此没有安全值。如果用户更改了其黑客文件,则为的jpeg扩展名它将很容易攻击我的服务器,这种方式只查找扩展名,他可以很容易地更改文件的扩展名注意,这不会检查用户无法设置的任何内容,因此安全性很低。(没有什么价值是因为非jpg的恶意内容可能无法与jpg扩展一起工作,但这在一般情况下是不确定的,尤其是在Windows上。)当然,这是不安全的。:)攻击者可以上载任何类型的文件,如果文件名以列出的扩展名之一结尾。这不是最初的问题所在,而且它没有提供安全值,因为文件扩展名是由客户端设置的。确切地说,Gabor,这就是我要说的。我需要安全问题,任何人都可以将其文件扩展名更改为jpeg和黑客网络!正如在问题上被问到的,这个答案不起作用。