Выбор ответа Middle Безопасность веб-приложения спрашивают часто обновлено

pickle от пользователя

Вопрос

Почему нельзя делать pickle.loads(request.body)?

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

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

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

Коротко

Правильный ответ: Десериализация pickle может выполнить произвольный код. Формат pickle позволяет описать вызов любой функции при загрузке (через reduce), поэтому специально созданные байты выполнят, например, os.system.

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

  1. Десериализация pickle может выполнить произвольный кодправильный ответ
  2. pickle не поддерживает кириллицу и упадёт на русском тексте
  3. pickle читает только из файлов, а не из байтов запроса
  4. Это медленно, но безопасно, если тело меньше мегабайта

Разбор

Формат pickle позволяет описать вызов любой функции при загрузке (через __reduce__), поэтому специально созданные байты выполнят, например, os.system. Документация Python прямо предупреждает: не распаковывать данные из недоверенных источников. Для обмена данными используют JSON, а для конфигов yaml.safe_load. То же касается кешей и очередей, куда может писать кто-то кроме вас.

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

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

Термины по теме