Выбор ответа Middle Безопасность веб-приложения спрашивают часто обновлено
pickle от пользователя
Вопрос
Почему нельзя делать pickle.loads(request.body)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Десериализация pickle может выполнить произвольный код. Формат pickle позволяет описать вызов любой функции при загрузке (через reduce), поэтому специально созданные байты выполнят, например, os.system.
Варианты ответа
- Десериализация pickle может выполнить произвольный кодправильный ответ
- pickle не поддерживает кириллицу и упадёт на русском тексте
- pickle читает только из файлов, а не из байтов запроса
- Это медленно, но безопасно, если тело меньше мегабайта
Разбор
Формат pickle позволяет описать вызов любой функции при загрузке (через __reduce__), поэтому специально созданные байты выполнят, например, os.system. Документация Python прямо предупреждает: не распаковывать данные из недоверенных источников. Для обмена данными используют JSON, а для конфигов yaml.safe_load. То же касается кешей и очередей, куда может писать кто-то кроме вас.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Path traversal при отдаче файлов
Следующий вопрос
Код-ревью: поиск, редирект и импорт настроек