Задать вопрос

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

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

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

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

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

          }
        }
}


Достаточно ли её для защиты веб-приложения?
  • Вопрос задан
  • 284 просмотра
Подписаться 4 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
черный список всегда небезопасен.
проверять надо только по белому

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽