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

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

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

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){

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

          }
        }
}


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

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽