Выбор ответа Junior Инъекции: SQL, NoSQL, команды спрашивают часто обновлено
Вызов внешней команды
Вопрос
Какой способ вызвать ping с хостом от пользователя безопаснее всего в Python?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: subprocess.run(["ping", "-c", "1", host]) после проверки формата host. Список аргументов без шелла исключает разбор ;, , $(), а валидация отсекает инъекцию опций вроде -f. os.system и shell=True передают строку шеллу. shlex.quote защищает от метасимволов, но шелл остаётся в цепочке, и без проверки значение,…
Варианты ответа
subprocess.run(["ping", "-c", "1", host])после проверки формата hostправильный ответos.system("ping -c 1 " + host.replace(";", ""))с удалением точки с запятойsubprocess.run(f"ping -c 1 {host}", shell=True, timeout=5)с таймаутомos.popen("ping -c 1 " + shlex.quote(host))без отдельной проверки host
Разбор
Список аргументов без шелла исключает разбор ;, |, $(), а валидация отсекает инъекцию опций вроде -f. os.system и shell=True передают строку шеллу. shlex.quote защищает от метасимволов, но шелл остаётся в цепочке, и без проверки значение, начинающееся с -, всё ещё станет опцией.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.