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

Опасность unserialize

Вопрос

Почему нельзя вызывать unserialize() на данных из cookie или запроса?

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

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

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

Коротко

Правильный ответ: Можно создать объекты любых классов: PHP object injection. Десериализация восстанавливает объекты указанных во входе классов.

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

  1. Это медленно на больших строках и блокирует воркер FPM
  2. Можно создать объекты любых классов: PHP object injectionправильный ответ
  3. unserialize не поддерживает UTF-8 и ломает кириллицу
  4. Данные из cookie всегда закодированы в base64 и не разберутся

Разбор

Десериализация восстанавливает объекты указанных во входе классов. Из подходящих классов проекта и его зависимостей собирают «гаджет-цепочки»: деструктор пишет файл, вызывает метод и так далее. Для внешних данных используют json_decode, а если unserialize неизбежен, передают ["allowed_classes" => false]. Скорость и кодировка тут вторичны.

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

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