Выбор ответа Senior Инъекции: SQL, NoSQL, команды обновлено

Инъекция опций

Вопрос

Сервис вызывает subprocess.run(["git", "clone", url, dest]), где url приходит от пользователя. Шелла нет. Какой риск остаётся?

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

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

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

Коротко

Правильный ответ: Значение с ведущим -, например --upload-pack=..., git примет за опцию. Отказ от шелла убирает метасимволы, но программа сама разбирает аргументы, и опции тоже.

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

  1. Никакого: без шелла аргументы не разбираются, и инъекция любого вида невозможна
  2. Значение с ведущим -, например --upload-pack=..., git примет за опциюправильный ответ
  3. Переполнение буфера в git при очень длинном URL, если не ограничить длину
  4. Утечка переменных окружения: git подставит $HOME и $PATH из значения url

Разбор

Отказ от шелла убирает метасимволы, но программа сама разбирает аргументы, и опции тоже. Защита: запретить ведущий -, ставить -- перед позиционными аргументами, ограничить схемы URL (например только https://). Подстановка $HOME делает шелл, а не git.

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

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