Выбор ответа Junior Инъекции: SQL, NoSQL, команды спрашивают часто обновлено

Вызов внешней команды

Вопрос

Какой способ вызвать ping с хостом от пользователя безопаснее всего в Python?

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

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

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

Коротко

Правильный ответ: subprocess.run(["ping", "-c", "1", host]) после проверки формата host. Список аргументов без шелла исключает разбор ;, , $(), а валидация отсекает инъекцию опций вроде -f. os.system и shell=True передают строку шеллу. shlex.quote защищает от метасимволов, но шелл остаётся в цепочке, и без проверки значение,…

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

  1. subprocess.run(["ping", "-c", "1", host]) после проверки формата hostправильный ответ
  2. os.system("ping -c 1 " + host.replace(";", "")) с удалением точки с запятой
  3. subprocess.run(f"ping -c 1 {host}", shell=True, timeout=5) с таймаутом
  4. os.popen("ping -c 1 " + shlex.quote(host)) без отдельной проверки host

Разбор

Список аргументов без шелла исключает разбор ;, |, $(), а валидация отсекает инъекцию опций вроде -f. os.system и shell=True передают строку шеллу. shlex.quote защищает от метасимволов, но шелл остаётся в цепочке, и без проверки значение, начинающееся с -, всё ещё станет опцией.

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

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