PHP 보안 프로 그래 밍:셸 명령 주입

3427 단어 셸 명령
시스템 명령 을 사용 하 는 것 은 위험한 작업 이다.특히 원 격 데 이 터 를 사용 하여 실행 할 명령 을 구성 하려 고 할 때 더욱 그렇다.오 염 된 데 이 터 를 사용 하면 명령 에 구멍 이 생 긴 다.
exec()셸 명령 을 수행 하 는 함수 입 니 다.명령 출력의 마지막 줄 을 되 돌려 줍 니 다.그러나 두 번 째 매개 변수 로 배열 을 지정 할 수 있 습 니 다.출력 된 줄 마다 하나의 요소 로 배열 에 저 장 됩 니 다.사용 방식 은 다음 과 같 습 니 다.1 <?php 2
  3 $last   exec ( 'ls' $output $return ); 4
  5 print_r( $output ); 6 echo   "Return [$return]" ; 7
  8 ?>
ls 명령 이shell에서 수 동 으로 실 행 될 때 다음 과 같은 출력 이 발생 한다 고 가정 합 니 다.1 $ ls 2 total 0 3 -rw-rw-r--  1 chris chris 0 May 21 12:34 php-security 4 -rw-rw-r--  1 chris chris 0 May 21 12:34 chris-shiflett
위의 방법 으로 exec()에서 실 행 될 때 출력 결 과 는 다음 과 같 습 니 다.1 Array 2 ( 3    [0] => total 0 4    [1] => -rw-rw-r--  1 chris chris 0 May 21 12:34 php-security 5    [2] => -rw-rw-r--  1 chris chris 0 May 21 12:34 chris-shiflett 6 ) 7 Return [0]
셸 명령 을 실행 하 는 방법 은 편리 하고 유용 하지만,이러한 편 의 는 당신 에 게 중대 한 위험 을 가 져 다 주 었 습 니 다.오 염 된 데이터 구조 명령 문자열 을 사용 하면 공격 자 는 임의의 명령 을 수행 할 수 있다.
가능 하 다 면 셸 명령 을 사용 하지 않 는 것 이 좋 습 니 다.실제로 사용 하려 면 구조 명령 문자열 의 데 이 터 를 걸 러 내 는 동시에 출력 을 전의 해 야 합 니 다.01 <?php 02
  03 $clean   array (); 04 $shell   array (); 05
  06 /* Filter Input ($command, $argument) */ 07
  08 $shell [ 'command' ] =  escapeshellcmd ( $clean [ 'command' ]); 09 $shell [ 'argument' ] =  escapeshellarg ( $clean [ 'argument' ]); 10
  11 $last   exec ( "{$shell['command']} {$shell['argument']}" $output , $return ); 12
  13 ?>
셸 명령 을 실행 할 수 있 는 여러 가지 방법 이 있 지만,실행 중인 문자열 을 구성 할 때 필터 와 전의 데이터 만 사용 할 수 있 도록 해 야 합 니 다.기타 주의해 야 할 같은 함수 로 는 passthru(),popen(),셸 이 있 습 니 다.exec(),그리고 system().가능 하 다 면 모든 셸 명령 의 사용 을 피 하 는 것 을 권장 합 니 다.

좋은 웹페이지 즐겨찾기