PHP

[PHP] eval 함수 사용법

수표 2018. 5. 7. 20:38

mixed eval ( string $code_str )

PHP코드를 테스트 할때 사용한다고 합니다


예제 #1

 <?php 
 $string 
'cup'

 $name 'coffee'

 $str 'This is a $string with my $name in it.'

 echo 
$str"\n"

 eval(
"\$str = \"$str\";"
); 


 /* 
 결과: 
 This is a $string with my $name in it. 
 This is a cup with my coffee in it. 
 */ 
 ?> 



This is a $string with my $name in it.  

이건 그대로 echo를 이용하여 출력한 결과입니다.

뭐라고 더 설명할것 없이 제대로 출력된 결과죠.


This is a cup with my coffee in it. 

이게 eval함수를 사용하여 나타낸 결과입니다.

작은 따옴표를 사용해서 문자열로 인식해 그대로 출력해야되지만, 

위에 echo에 반대로 $string에 실제 변수값이 들어가고, 또한 $name에 실제 변수값이 들어간것을 알수 있습니다.


이걸 이용해서 DB에 함수를 저장해놓고 불러와서 사용할수도 있겠죠


그러나 만약 아래와 같이 사용하면 악성 사용자들에 의해 위험한 환경에 놓일수도 있습니다


예제 #2

 <?php 
 $str 
$_GET['data'
]; 
 eval(
$str
); 
 ?>


만약 파일명.php?data=phpinfo(); 처럼 입력한다면 phpinfo()를 실행해 실제 서버 정보라던지 중요사항이 드러날수도 있습니다


예를들어 DB에 데이터가 저장되어있다면 mysql_fetch_array(mysql_query("select field tb where id=$id")); 를 입력하여 아이디를 빼내거나 하는것도 어렵지는 않다는 말입니다


심지어 이런것도 가능하겠죠 eval( ' ?> test <?php ' ); 또는 eval('include("//www.naver.com");'); 

이렇게 한다면 저 부분에 악성코드를 넣어놔도 어떻게 할수없는부분이 나올수도 있습니다.


eval함수는 테스트용도로만 사용하는것을 추천합니다.

전혀 변함이 없는 변수를 사용한다거나 해도 '절대' 라는것은 없습니다.

안전을 최우선으로! 감사합니다~