Выбор ответа Middle Сессии и безопасность обновлено

Безопасная загрузка файлов

Вопрос

Пользователи загружают аватары. Какой подход безопаснее?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Тип по содержимому (finfo), своё имя файла, без выполнения PHP. Расширение и Content-Type присылает клиент, их легко подделать: shell.php с типом image/png в каталоге, где выполняется PHP, это удалённое выполнение кода.

Варианты ответа

  1. Тип по содержимому (finfo), своё имя файла, без выполнения PHPправильный ответ
  2. Проверять расширение из имени файла и сохранять в public/uploads/
  3. Доверять заголовку Content-Type из запроса и проверять image/*
  4. Сохранять под оригинальным именем, но переводить его в нижний регистр

Разбор

Расширение и Content-Type присылает клиент, их легко подделать: shell.php с типом image/png в каталоге, где выполняется PHP, это удалённое выполнение кода. Тип определяют по содержимому, имя генерируют сами (защита от ../ и перезаписи), файлы кладут в хранилище без выполнения скриптов или отдают через контроллер. Ограничивают размер через upload_max_filesize и проверку в коде.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.