>백엔드 개발 >파이썬 튜토리얼 >보안 위험 없이 `subprocess.Popen()`에 변수를 안전하게 전달할 수 있는 방법은 무엇입니까?

보안 위험 없이 `subprocess.Popen()`에 변수를 안전하게 전달할 수 있는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-02 19:17:10628검색

How Can I Safely Pass Variables to `subprocess.Popen()` Without Security Risks?

Subprocess.Popen()에서 변수 전달의 함정 극복

많은 스크립트에서는 인수를 사용하여 외부 프로그램을 호출해야 할 필요성이 발생합니다. 이러한 인수가 변수에 저장되면 subprocess.Popen()에 문제가 발생할 수 있습니다. 간단해 보일 수도 있지만 특정 함정으로 인해 이 프로세스가 방해를 받을 수 있습니다.

shell=True를 사용할 때 이러한 함정 중 하나가 발생합니다. 이 옵션은 Unix 시스템에서 인수를 다르게 처리하므로 예기치 않은 동작이 발생합니다. 이 문제를 탐색하려면 shell=True를 삭제하는 것이 좋습니다.

예:

다음 시나리오를 고려하세요.

import subprocess

# Populate a list of arguments
args = ["mytool.py"]
for opt, optname in zip("-a -x -p".split(), "address port pass".split()):
    args.extend([opt, str(servers[server][optname])])
args.extend("some additional command".split())

# Run the script without shell=True
p = subprocess.Popen([sys.executable or 'python'] + args, stdout=subprocess.PIPE)

이 접근 방식을 사용하면 인수가 처리됩니다. 정확하게 외부 프로그램이 의도한 입력을 받을 수 있도록 합니다.

보안 고려 사항:

외부 입력이 포함된 명령에 대해 shell=True를 설정하면 보안 위험이 발생한다는 점에 유의하는 것이 중요합니다. 하위 프로세스 문서에 설명된 대로 이 방법으로 인해 스크립트가 잠재적인 취약점에 노출될 수 있습니다.

위 내용은 보안 위험 없이 `subprocess.Popen()`에 변수를 안전하게 전달할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.