Достаточно ли безопасен этот скрипт загрузки изображений на сервер?

На моём ресурсе пользователи имеют возможность загрузки некоторых изображений (например аватарок).

Чтобы избежать попадание на сервер вредоносного кода, я использую следующую функцию:

if ($_FILES['avatar']['error'] == UPLOAD_ERR_OK && ($_FILES['avatar']['type'] == 'image/png' || $_FILES['avatar']['type'] == 'image/jpeg' || $_FILES['avatar']['type'] == 'image/jpg')){

        //Проверка содержания файла
        $info = getimagesize($_FILES['avatar']['tmp_name']);
        if ($info['mime'] == 'image/png' || $info['mime'] == 'image/jpeg' || $info['mime'] == 'image/jpg'){

          //Проверка на недопустимые расширения
          $blacklist = array('.php','.phtml','.php3','.php4','.html','.htm');
          $coincedents = 0;
          foreach ($blacklist as $item){
            if (preg_match("/$item\$/i", $_FILES['avatar']['name'])){ $coincedents++; }
          }
          if ($coincedents == 0){

            //Проверка пройдена

          }
        }
}


Достаточно ли её для защиты веб-приложения?
  • Вопрос задан
  • 272 просмотра
Решения вопроса 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
черный список всегда небезопасен.
проверять надо только по белому

Плюс желательно переменовывать файл целиком, потому что к примеру веб-сервер апач может принять за расширение файла то, что им не является.
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
самый простой способ это не загружать изображение как есть, а изменить его размер с помощью gd/imagick и сохранить если модификация не вызвала ошибок. ну и выдать файлам права 0644 чтобы их нельзя было выполнить.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы