2013-07-29 2 views
2

Мне было интересно, может ли кто-нибудь помочь, я отправил ImageResizer и отправил письмо примерно неделю назад и пока не получил ответа о моем запросе. Поэтому, надеюсь, кто-то из ImageResizer или члена Stackoverflow может ответить на мой вопрос.Подтвердить загрузку изображения с помощью ImageResizer.net

У меня есть следующий код.

if (File != null && File.ContentLength > 0) 
        { 
         string extension = Path.GetExtension(File.FileName.ToLower()); 
         var imageId = Guid.NewGuid(); 
         if (extension == ".png" || extension== ".jpg" || extension == ".jpeg" || extension == ".gif") 
         { 

           var i = new ImageResizer.ImageJob(File, "~/uploads/" + imageId + ".<ext>", 
            new ImageResizer.ResizeSettings("width=200;height=200;format=png;mode=max")) 
           { 
            CreateParentDirectory = false 
           }; 

           i.Build();    
           GetValue(model, imageId); 
           return RedirectToAction("RegisterStepTwo", "Account"); 
          // } 

          // TempData["WrongImageFormat"] = "Image must be either png, jpeg/jpg or gif"; 
          // return View(); 



         } 
         TempData["WrongImageFormat"] = "Image must be either png, jpeg/jpg or gif"; 
         return View(); 
        } 

То, что я прочитал за последнюю неделю на этом сайте, и других в том, что, чтобы попытаться подтвердить против недопустимой загрузки изображения, имени файла изменений, изменить размер и изменить расширение.

Этот код, как представляется, делает это, и я добавляю свой собственный Guid для добавления в базу данных. Если я создаю недопустимый файл в блокноте, добавьте javascript и сохраните его как png, он вернет следующую ошибку.

[ImageCorruptedException (0x80004005): File may be corrupted, empty, or may contain a PNG image with a single dimension greater than 65,535 pixels.] 

Итак, мой вопрос в том, защищает ли код от недопустимых загрузок изображения. Прочитав документы here и еще там, где на веб-сайте я не могу найти требуемую информацию.

Надеюсь, с этим вопросом может помочь человек с большим опытом, чем я.

ответ

1

Повторное кодирование изображения и удаление метаданных - лучший способ гарантировать, что он не может содержать вредоносный контент. ImageResizer делает это по умолчанию.

Однако очень важно удостовериться, что данные изображения никогда не интерпретируются как что-либо иное, кроме изображения, что означает управление окончательным расширением файла и обеспечение того, что оно всегда обслуживается клиентами с типом изображения mime. Использование шаблонов шаблонов ImageResizer - хороший способ помочь с этим - как вы это делаете. Никогда не используйте имя загруженного файла.

Если вы хотите, чтобы расширения файлов в белом списке, Config.Current.Pipeline.AcceptedImageExtensions и Config.Current.Pipeline.IsAcceptedImageType(path) помогут вам определить, поддерживает ли ImageResizer их в качестве исходных форматов. Форматы вывода всегда png, gif, jpeg или webp (если установлен WebPEncoder), поэтому вам не нужно беспокоиться об этом, если вы используете переменную пути <ext>.

Вместо того, чтобы фильтровать расширение загружаемого файла, как вы это делаете, вы можете просто использовать блок try{} catch{} для захвата любого брошенного ImageCorruptedException. Не очень информативно блокировать загрузку на основе расширения файла; лучше сказать, что файл не содержит достоверных данных изображения.

Кроме того, извините, мы не получили ваше электронное письмо с прошлой недели; Я не могу найти никаких записей о том, что вы спрашиваете об этом до сегодняшнего дня.

+0

Привет, компьютерный лингвист, спасибо за ответ, я просто выслал другое письмо сегодня вечером (сегодня) с копией моего кода. Еще раз спасибо за вашу помощь, я буду изменять код в соответствии с вашим ответом. –