sql injection 을 피하기 위해 single quote 를 escape 시켜주는 코드를 작성해야할 필요가 있었는데, 매번 하나하나에 대해 mysql_real_escape_string 을 호출해주는 건 너무나도 번거로웠다. 뭔가 간단하게 처리할 방법이 없을까 하고 찾아봤더니 왠걸! array_map 이라는 마법의 함수를 발견할 수 있었다.
function stripslashes_deep($var){
$var = is_array($var)?
array_map('stripslashes_deep', $var) :
stripslashes($var);
return $var;
}
function mysql_real_escape_string_deep($var){
$var = is_array($var)?
array_map('mysql_real_escape_string_deep', $var) :
mysql_real_escape_string($var);
return $var;
}
if( get_magic_quotes_gpc() ){
if( is_array($_POST) )
$_POST = array_map( 'stripslashes_deep', $_POST );
if( is_array($_GET) )
$_GET = array_map( 'stripslashes_deep', $_GET );
}
if( is_array($_POST) )
$_POST = array_map( 'mysql_real_escape_string_deep', $_POST );
if( is_array($_GET) )
$_GET = array_map( 'mysql_real_escape_string_deep', $_GET);
common function 들을 정의해놓은 파일 맨 아래 저 코드를 삽입해버리니 sql injection 따위 이제 두려워할 필요가 없어졌다. 움하하핫!!
p.s) 그냥 array_map 에 stripslashes 나 mysql_real_escape_string 을 사용하게 되면 array 가 넘어온 경우 문제가 생길 수 있어서 약간 수정을 했습니다.
Tags: array_map, avoid, mysql, mysql_real_escape_string, php, Programing, sql injection
October 25th, 2007 at 11:54 pm
조쿤요!
October 26th, 2007 at 1:34 am
이런 맛에 스크립트를 못등지겠어요. 만약 공통되게 include 하는 파일이 없고, 수정해야할 파일이 많다! 싶다면 저런 코드를 넣은 파일을 /home/common/avoid_sql_injection.php 정도로 만들고 .htaccess 에 아래 코드를 넣어줘도 되요. +_+
php_value auto_prepend_file /home/common/avoid_sql_injection.php
약간 야매긴 하지만 하튼 array_map 이나 auto_prepend_file 같은 건 알아두면 대게 유용하게 써먹을 수 있을 것 같아요. 흐흣