Я понимаю, почему использование оболочки «shell = True» может представлять угрозу безопасности, если у вас есть ненадежный ввод. Однако я не понимаю, как «shell = False» избегает одинаковых рисков.Безопасность подпроцесса Python
Предположительно, если бы я хотел, чтобы позволить пользователю, чтобы обеспечить ввод он мог бы вход: Var = «гт -rf /»
Мой код может просто:
subprocess.call(var,shell=True) # bad stuff
Или я мог бы сделать:
varParts=var.split()
subprocess.call(varParts,shell=False) # also bad, right?
Похоже, что предположение заключается в том, что не будет решена проблема обработки ввода, как это было во втором примере, и поэтому этого было бы/не могло бы случиться?
Ummmm в любое время вы передаете ненадежный вход как вызов вы работаете значительные риски .... где ты слышать shell = False делает его безопасным? http://docs.python.org/2/library/subprocess.html#frequently-used-arguments ... все, что он делает, это прекратить инъекцию оболочки, которая является всего лишь одной атакой ... –
В самой ссылке, которую вы указали, есть заметка что «Предупреждение: Вызов системной оболочки с оболочкой = True может быть угрозой безопасности в сочетании с ненадежным вводом». Это означает, что использование shell = False обеспечивает некоторую защиту от этого. – user3175543