시스템 프로그램 실행 escapeshellcmd
(PHP 4, PHP 5, PHP 7, PHP 8)
escapeshellcmd — 이스케이프 쉘 메타 문자
설명
escapeshellcmd(string $command
): string
escapeshellcmd()는 임의의 명령을 실행하도록 쉘 명령을 속이는 데 사용할 수 있는 문자열의 모든 문자를 이스케이프합니다. 이 함수는 이 데이터가 exec() 또는 system() 함수 또는 백틱 연산자로 전달되기 전에 사용자 입력에서 오는 모든 데이터가 이스케이프되었는지 확인하는 데 사용해야 합니다.
다음 문자 앞에는 백슬래시가 붙습니다. `|*?~<>^()[]{}$\, \x0A 및 \xFF. ' 및 "는 쌍을 이루지 않은 경우에만 이스케이프됩니다. Windows에서 이러한 모든 문자와 % 및 ! 앞에는 캐럿(^)이 붙습니다.
매개변수
command
- 이스케이프할 명령입니다.
반환 값
이스케이프된 문자열입니다.
Examples
예제 #1 escapeshellcmd() 예제
<?php
// We allow arbitrary number of arguments intentionally here.
$command = './configure '.$_POST['configure_options'];
$escaped_command = escapeshellcmd($command);
system($escaped_command);
?>
경고 escapeshellcmd()는 전체 명령 문자열에 사용해야 하며 여전히 공격자가 임의의 수의 인수를 전달할 수 있습니다. 단일 인수를 이스케이프하려면 escapeshellarg()를 대신 사용해야 합니다.
경고 C:\Program Files\ProgramName\program.exe와 같은 경로가 있는 Windows에서 문제가 될 수 있는 escapeshellcmd()에 의해 공백이 이스케이프되지 않습니다. 다음 코드 조각을 사용하여 완화할 수 있습니다.
<?php
$cmd = preg_replace('`(?<!^) `', '^ ', escapeshellcmd($cmd));
기타
- escapeshellarg() - 쉘 인수로 사용할 문자열 이스케이프
- exec() - 외부 프로그램 실행
- popen() - 프로세스 파일 포인터를 엽니다.
- system() - 외부 프로그램을 실행하고 출력을 표시
- backtick operator