sql injection 을 피하기위한 간단한 방법…

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 가 넘어온 경우 문제가 생길 수 있어서 약간 수정을 했습니다.

Related Posts

This entry was posted by 정태영 on Wednesday, October 24th, 2007 at 10:48 PM and is taged under , , , , , , , , , . You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

2 Responses to “sql injection 을 피하기위한 간단한 방법…”

  1. 정태영 says:

    이런 맛에 스크립트를 못등지겠어요. 만약 공통되게 include 하는 파일이 없고, 수정해야할 파일이 많다! 싶다면 저런 코드를 넣은 파일을 /home/common/avoid_sql_injection.php 정도로 만들고 .htaccess 에 아래 코드를 넣어줘도 되요. +_+

    php_value auto_prepend_file /home/common/avoid_sql_injection.php

    약간 야매긴 하지만 하튼 array_map 이나 auto_prepend_file 같은 건 알아두면 대게 유용하게 써먹을 수 있을 것 같아요. 흐흣

Leave a Reply

믹시