프로그래밍 언어 내에서 간단한 쉘 명령을 실행합니다.
cd var; echo > create_a_file_here
와 var에 내가 파일 "create_a_file_here"을 만들려는 장소 (희망) 디렉토리의 문자열을 포함하는 변수 인. 이제 누군가가이 코드 라인을 보게되면, 예를 들어 다음과 같이 할당하여 코드를 이용할 수 있습니다.
var = "; rm -rf /"
상황이 꽤 추악해질 수 있습니다. 위의 경우를 피하는 한 가지 방법은 var 에서 문자열을 검색하여 ';'와 같은 특수 문자 를 찾는 것입니다 . 셸 명령을 실행하기 전에 가능한 모든 악용 가능성이 의심 스럽습니다.
"cd var"가 디렉토리 만 변경하고 다른 것은 변경하지 않는 좋은 방법을 아는 사람이 있습니까?
sh하거나 비슷한 구문으로 고유 한 프로그래밍 언어를 작성하고 있지만 작성하는 var대신 확장 cd "$var"하는가? 아니면 이것 bash과 함께 shopt -s cdable_vars입니까? 오, 다른 프로그램에서이 명령을 실행하기 위해 쉘을 포크한다는 것을 의미한다고 생각합니다. 따라서 인용 만하십시오 var. 그러나 인용 부호 자체를 포함하지 않아야합니다.
s='"'; echo "$s"를 인쇄합니다 ".
var=untrusted string부모 프로그램에서하십시오. 따라서 var호출 할 때 이미 설정된 환경 변수입니다 sh. 그런 다음 확장 할 때마다 인용하면됩니다. 확실히 할 수 있습니다. 아, 나는 그 아이디어가 이미 스테판의 답변의 일부인 것을 본다>. <
var인수로 전달할 수도 있습니다 . 예는 호출sh인수-c,'cd "$1"; echo > create_a_file_here','sh',var작품에 대한 변경이 필요하지 않습니다var.'sh'인수로 전달됩니다$0.