Выбор ответа Senior Сессии и безопасность обновлено
Опасность unserialize
Вопрос
Почему нельзя вызывать unserialize() на данных из cookie или запроса?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Можно создать объекты любых классов: PHP object injection. Десериализация восстанавливает объекты указанных во входе классов.
Варианты ответа
- Это медленно на больших строках и блокирует воркер FPM
- Можно создать объекты любых классов: PHP object injectionправильный ответ
unserializeне поддерживает UTF-8 и ломает кириллицу- Данные из cookie всегда закодированы в base64 и не разберутся
Разбор
Десериализация восстанавливает объекты указанных во входе классов. Из подходящих классов проекта и его зависимостей собирают «гаджет-цепочки»: деструктор пишет файл, вызывает метод и так далее. Для внешних данных используют json_decode, а если unserialize неизбежен, передают ["allowed_classes" => false]. Скорость и кодировка тут вторичны.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.