Выбор ответа Senior Инъекции: SQL, NoSQL, команды обновлено
Инъекция опций
Вопрос
Сервис вызывает subprocess.run(["git", "clone", url, dest]), где url приходит от пользователя. Шелла нет. Какой риск остаётся?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Значение с ведущим -, например --upload-pack=..., git примет за опцию. Отказ от шелла убирает метасимволы, но программа сама разбирает аргументы, и опции тоже.
Варианты ответа
- Никакого: без шелла аргументы не разбираются, и инъекция любого вида невозможна
- Значение с ведущим
-, например--upload-pack=..., git примет за опциюправильный ответ - Переполнение буфера в git при очень длинном URL, если не ограничить длину
- Утечка переменных окружения: git подставит
$HOMEи$PATHиз значения url
Разбор
Отказ от шелла убирает метасимволы, но программа сама разбирает аргументы, и опции тоже. Защита: запретить ведущий -, ставить -- перед позиционными аргументами, ограничить схемы URL (например только https://). Подстановка $HOME делает шелл, а не git.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.