2016-08-25 3 views
0

"셸"이없는 인수를 사용하여 명령을 실행하는 방법이 있습니까?PHP에서 셸없이 매개 변수로 명령 실행

exec()shell_exec()은 쉘에서 제공된 문자열을 실행하므로 사용자가 입력 한 데이터는 모두 이스케이프해야합니다.

이 좋아 할 수있는 방법이 있나요 :

some_exec(["command","argument","argument]) 

하나의 예를 파이썬이나 자바를 위해 그것을에서하는 것처럼.

일부 인수를 이스케이프하지 않고도 인수를 사용하여 명령을 실행할 수 있습니다.

라우터의 UI에서 작업 중이며 Wifi 키가 물음표로 설정되어 있습니다. 키를 포함 할 수있는 문자 수를 제한하는 문자열을 이스케이프 처리해야합니다. 열쇠를 벗어날 수없는 곳에서 아무런 문제없이 주사를 할 수 있습니다.

[email protected][0].key='<the password>' 

이 문제는 암호가 설정되고 있음을하기 때문에 :

대한 설명 이 실제로이 경우 성가신 문제가 이유는 내가 다음 명령을 실행해야한다는 것입니다 이 암호 문자열 $il|\|t\$ile\|\\\|t이되어 잘못된 암호가 유효한 것입니다. 따라서 저장된 암호는 사용자가 입력 한 암호와 다릅니다.

그리고 우리는 문자열에 암호를 입력하더라도 우리는 여전히 내가 인수를 탈출하지 않는 당신의 필요를 이해하는 몇 가지 문제가이 ' ; reboot ; '

+0

[link] http://php.net/manual/en/function.exec.php [ – sam

답변

0

같은 분사 할 수 있습니다. 나는 이스케이프 문자열로 반향 전화를했는데, 에코 표시 원래 문자열 :

ARG : '&#;`|*?~<>^()[]{}$' 
exec : &#;`|*?~<>^()[]{}$ 
passthru : &#;`|*?~<>^()[]{}$ 
shell_exec : &#;`|*?~<>^()[]{}$ 
system : &#;`|*?~<>^()[]{}$ 

당신이 실행하려는 명령의 예를 들어 줄 수 : 여기

$cmd = 'echo'; 
$passwd = escapeshellarg('&#;`|*?~<>^()[]{}$'); 
echo 'ARG : ' . $passwd . PHP_EOL; 

exec($cmd . ' ' . $passwd, $output); 
echo 'exec : ' . $output[0] . PHP_EOL; 

echo 'passthru : '; 
passthru($cmd . ' ' . $passwd); 

echo 'shell_exec : ' . shell_exec($cmd . ' ' . $passwd); 

echo 'system : '; 
system($cmd . ' ' . $passwd); 

출력입니까?

+0

] 이것을 실행해야합니다 : 'uci set wireless.radio [0] = '<암호>' '. 만약 사용자가 암호'$ ile | \ | t "를 원한다면 다음과 같이 이스케이프 될 것입니다 :'\ $ ile \ | \\\ | t' 문제는 문자열에서 문자열이 그대로 설정된다는 것입니다 .하지만 나는 여전히''재부팅 ''을하는 암호를 제공함으로써 주사를 할 수 있습니다. –

+0

$ cmd = 'uci set wireless.radio [0] ='; $ passwd = escapeshellarg ('$ ile | \ | t " '); $ fullCommand = $ cmd. $ passwd; 은 다음 출력을 제공합니다. uci set wireless.radio [0] = '$ ile | \ | t " – vincenth

관련 문제