2015-02-03 5 views
0

Bash CGI 스크립트에서 GET 매개 변수로 전달 된 명령을 실행합니다. 다음과 같을 수 있습니다.Bash CGI의 동일한 변수에서 두 개의 명령 실행

CMD='ls -al' 
$CMD 

잘 작동하고 예상되는 출력을 생성합니다. 내가

CMD='ls -al; echo hello' 
$CMD 

또는

CMD='ls -al && echo hello' 
$CMD 

도 명령이 명령을 전달하려고하지만 실행됩니다.

bash CGI에서 같은 줄/변수에서 여러 명령을 어떻게 실행합니까?

+0

[명령을 변수에 넣지 마십시오] (http://mywiki.wooledge.org/BashFAQ/050). 그것은 당신의 명령이 더욱 복잡 해짐에 따라 매우 빨리 멈추게 될 것입니다. 당신이 방금 예를 들어 본 것처럼. –

+0

@EtanReisner 그런 다음 내 시나리오에 대해 제안 하시겠습니까? 나는 GET 변수로부터 명령을 받고, URL 인코딩을 깨끗이하고, 실행해야한다. – Juicy

+0

'GET' 매개 변수로 전달 된 임의의 명령을 실행하는 원격 셸을 만들어야합니까? 그것은 당신이 입력을 위생적으로 만들려고 노력했다 할지라도 안전하지 못합니다. –

답변

0
당신은 bash 사용 bash는 코드와 같은 변수를 실행할 수 있습니다

: 그것은에 선 것처럼 당신이 그것을 실행하는 eval "$cmd"을 사용할 수 있습니다, 당신이 그것을 실행하려는 상황에 따라, 또는

# UNSAFE, DO NOT USE 
cmd='ls -al; echo hello' 
bash -c "$cmd" 

당신의 오히려 쉘 코드의 별도의 조각보다는 자신의 스크립트 실행합니다 :

# UNSAFE, DO NOT USE 
cmd='ls -al; echo hello' 
eval "$cmd" 

두 방법 모두 보안 및 정확성에 심각한 영향을 미칠, 그래서 내가 콩트에서 복사되는 것을 방지하기 위해 경고를 추가했다 느꼈다 xt.

특히 안전하지 않은 사용자 입력을 실행하는 원격 셸 또는 루트 키트의 경우 경고를 무시할 수 있습니다.

+0

자신의 유틸리티 스크립트를 작성하는 경우 스크립트 자체만큼 안전하지 못합니다. 이것은 더 많은 사람들이 사용하기 위해 배포하려는 유틸리티 내에서 사용되면 더욱 안전합니다. eval에 전달되는 문자열은 동적으로 생성되며 사용자가 영향을받는 입력에서 온 정보를 제공합니다. 위험과 잠재적 영향을 평가하기 전에는 보안 관련 내용을 정의 할 수 없습니다. 현미경 적 위험 및 현미경 적 영향은 아무런 보안 상 함의와 동일하지 않습니다. – Greg0ry

관련 문제