기타 언어(C, PHP 등)

[PHP] eval 함수의 위험성

노루아부지 2019. 7. 18. 23:37

mixed eval ( string $code_str ) (PHP 4, PHP 5)

이 함수는 php코드를 평가하기 위해 사용됩니다. 예를 들면, 다음의 결과로 이해할 수 있을 것입니다.


예제(ex #1

<?php 
 $string = 'cup'; 
 $name = 'coffee'; 
 $str = 'This is a $string with my $name in it.'; 
 echo $str. "\n"; 
 eval("\$str = \"$str\";"); 
 echo $str. "\n"; 
 /* 
 결과: 
 This is a $string with my $name in it. 
 This is a cup with my coffee in it. 
 */ 
 ?>

 

작은따옴표에 의한 값은 보통 일반 텍스트 문자로 처리되지만, eval 함수를 사용하게 되면 php 코드로 해석, 실행해 버립니다. 그래서 간혹 개발자는 편의상 디비에 저장해 두었던 php 코드 데이터를 읽어 와서 eval 함수로 php 코드로 사용하곤 합니다.

이는 분명 편리하기는 하지만 문제가 있습니다. 만약, eval 함수가 악의적인 사용자에게 노출되면 매우 위험해진다는 점을 이해할 필요가 있습니다. 예를 들어, $str 변수가 변질이 되면 공격자는 서버뿐만 아니라 모든 데이터를 훼손할 우려가 있습니다.

 

 

예제(ex #2

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

 

예제(ex #3

<?php 
 $str = mysql_fetch_array(mysql_query("select field tb where id=$id")); 
 eval($str); 
 /* 
 $str 변수의 값:
 eval( '?> foo <?php' ); 
 or
 eval("\$handle = fopen(\"http://domain.com/template.phtml\");");
 */
 ?>

 

가능하다면 eval 함수를 사용하지 않기를 권하며, 분명 어떤 변수가 변질되지 않는다고 확신하더라도 권장하지 않습니다.

 

 

출처 : https://habony.tistory.com/265#.XTCEPk17lCq

 

 

728x90
loading