프로그래밍 언어 내에서 간단한 쉘 명령을 실행합니다.
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
.