신뢰할 수없는 입력이있는 경우 'shell = True'를 사용하면 보안 상 위험 할 수 있습니다. 그러나 'shell = False'가 동일한 위험을 피하는 방법을 이해하지 못합니다. 나는 사용자가 자신이 입력 수도 입력 제공 할 수 있도록하고 싶었 아마도 경우파이썬 하위 프로세스 보안
: VAR을 = "RF RM은 /"
내 코드 수도 단순히 :
subprocess.call(var,shell=True) # bad stuff
또는 내가 할 수 있습니다
varParts=var.split()
subprocess.call(varParts,shell=False) # also bad, right?
두 번째 예에서와 같이 입력을 처리하는 과정을 거치지 않는다고 가정하는 것처럼 보일 수 있습니다.
ummmm 신뢰할 수없는 입력을 호출로 전달할 때 심각한 위험을 초래할 때 사용자가 프로그램을 호출하도록 제어 할 수있게하려면 ... 듣다 껍데기 = 거짓은 안전한가요? http://docs.python.org/2/library/subprocess.html#frequentlyused-arguments ... 모든 것은 단지 하나의 공격 인 쉘 주입을 막습니다. –
제공 한 바로 링크에 메모가 있습니다 "경고 : shell = True로 시스템 쉘을 호출하면 신뢰할 수없는 입력과 결합하면 보안 상 위험 할 수 있습니다." 이것은 shell = False를 사용하는 것이 쉘에 대한 방어책을 제공한다는 것을 의미합니다. – user3175543