정태영

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: , , , , , ,

This entry was posted on Wednesday, October 24th, 2007 at 10:48 pm and is filed under Computer, OpenSource. 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:

    조쿤요!

  2. 정태영 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