Выбор ответа Middle Сессии и безопасность обновлено
Безопасная загрузка файлов
Вопрос
Пользователи загружают аватары. Какой подход безопаснее?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Тип по содержимому (finfo), своё имя файла, без выполнения PHP. Расширение и Content-Type присылает клиент, их легко подделать: shell.php с типом image/png в каталоге, где выполняется PHP, это удалённое выполнение кода.
Варианты ответа
- Тип по содержимому (
finfo), своё имя файла, без выполнения PHPправильный ответ - Проверять расширение из имени файла и сохранять в
public/uploads/ - Доверять заголовку
Content-Typeиз запроса и проверятьimage/* - Сохранять под оригинальным именем, но переводить его в нижний регистр
Разбор
Расширение и Content-Type присылает клиент, их легко подделать: shell.php с типом image/png в каталоге, где выполняется PHP, это удалённое выполнение кода. Тип определяют по содержимому, имя генерируют сами (защита от ../ и перезаписи), файлы кладут в хранилище без выполнения скриптов или отдают через контроллер. Ограничивают размер через upload_max_filesize и проверку в коде.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.