diff --git a/adm/mail_select_form.php b/adm/mail_select_form.php index 8aebfd80e..a8115297d 100644 --- a/adm/mail_select_form.php +++ b/adm/mail_select_form.php @@ -62,7 +62,7 @@ include_once('./admin.head.php'); - + diff --git a/common.php b/common.php index 3e12011eb..91a930548 100644 --- a/common.php +++ b/common.php @@ -25,14 +25,6 @@ for ($i=0; $i<$ext_cnt; $i++) { } //========================================================================================================================== -// 완두콩님이 알려주신 보안관련 오류 수정 -// $member 에 값을 직접 넘길 수 있음 -$config = array(); -$member = array(); -$board = array(); -$group = array(); -$g5 = array(); - function g5_path() { @@ -54,6 +46,73 @@ include_once($g5_path['path'].'/config.php'); // 설정 파일 unset($g5_path); +// multi-dimensional array에 사용자지정 함수적용 +function array_map_deep($fn, $array) +{ + if(is_array($array)) { + foreach($array as $key => $value) { + if(is_array($value)) { + $array[$key] = array_map_deep($fn, $value); + } else { + $array[$key] = call_user_func($fn, $value); + } + } + } else { + $array = call_user_func($fn, $array); + } + + return $array; +} + + +// SQL Injection 대응 문자열 필터링 +function sql_escape_string($str) +{ + $pattern = G5_ESCAPE_PATTERN; + $replace = G5_ESCAPE_REPLACE; + + $str = preg_replace($pattern, $replace, $str); + $str = call_user_func('addslashes', $str); + + return $str; +} + + +//============================================================================== +// SQL Injection 등으로 부터 보호를 위해 sql_escape_string() 적용 +//------------------------------------------------------------------------------ +// magic_quotes_gpc 에 의한 backslashes 제거 +if (get_magic_quotes_gpc()) { + $_POST = array_map_deep('stripslashes', $_POST); + $_GET = array_map_deep('stripslashes', $_GET); + $_COOKIE = array_map_deep('stripslashes', $_COOKIE); + $_REQUEST = array_map_deep('stripslashes', $_REQUEST); +} + +// sql_escape_string 적용 +$_POST = array_map_deep(G5_ESCAPE_FUNCTION, $_POST); +$_GET = array_map_deep(G5_ESCAPE_FUNCTION, $_GET); +$_COOKIE = array_map_deep(G5_ESCAPE_FUNCTION, $_COOKIE); +$_REQUEST = array_map_deep(G5_ESCAPE_FUNCTION, $_REQUEST); +//============================================================================== + + +// PHP 4.1.0 부터 지원됨 +// php.ini 의 register_globals=off 일 경우 +@extract($_GET); +@extract($_POST); +@extract($_SERVER); + + +// 완두콩님이 알려주신 보안관련 오류 수정 +// $member 에 값을 직접 넘길 수 있음 +$config = array(); +$member = array(); +$board = array(); +$group = array(); +$g5 = array(); + + //============================================================================== // 공통 //------------------------------------------------------------------------------ @@ -71,30 +130,6 @@ if (file_exists($dbconfig_file)) { sql_query(" set names utf8 "); if(defined('G5_MYSQL_SET_MODE') && G5_MYSQL_SET_MODE) sql_query("SET SESSION sql_mode = ''"); if (defined(G5_TIMEZONE)) sql_query(" set time_zone = '".G5_TIMEZONE."'"); - - //============================================================================== - // SQL Injection 등으로 부터 보호를 위해 sql_escape_string() 적용 - //------------------------------------------------------------------------------ - // magic_quotes_gpc 에 의한 backslashes 제거 - if (get_magic_quotes_gpc()) { - $_POST = array_map_deep('stripslashes', $_POST); - $_GET = array_map_deep('stripslashes', $_GET); - $_COOKIE = array_map_deep('stripslashes', $_COOKIE); - $_REQUEST = array_map_deep('stripslashes', $_REQUEST); - } - - // sql_escape_string 적용 - $_POST = array_map_deep(G5_ESCAPE_FUNCTION, $_POST); - $_GET = array_map_deep(G5_ESCAPE_FUNCTION, $_GET); - $_COOKIE = array_map_deep(G5_ESCAPE_FUNCTION, $_COOKIE); - $_REQUEST = array_map_deep(G5_ESCAPE_FUNCTION, $_REQUEST); - //============================================================================== - - // PHP 4.1.0 부터 지원됨 - // php.ini 의 register_globals=off 일 경우 - @extract($_GET); - @extract($_POST); - @extract($_SERVER); } else { ?> diff --git a/config.php b/config.php index 8f7fa01be..a355d956f 100644 --- a/config.php +++ b/config.php @@ -162,8 +162,12 @@ define('G5_SMTP', '127.0.0.1'); define('G5_DISPLAY_SQL_ERROR', TRUE); // escape string 처리 함수 지정 -// POST 등에서 한글이 깨질 경우 addslashes 로 변경 -define('G5_ESCAPE_FUNCTION', 'sql_real_escape_string'); +// addslashes 로 변경 가능 +define('G5_ESCAPE_FUNCTION', 'sql_escape_string'); + +// sql_escape_string 함수에서 사용될 패턴 +define('G5_ESCAPE_PATTERN', '/(and|or).*(union|select|insert|update|delete|from|where|limit|create|drop).*/i'); +define('G5_ESCAPE_REPLACE', ''); // 게시판에서 링크의 기본개수를 말합니다. // 필드를 추가하면 이 숫자를 필드수에 맞게 늘려주십시오. diff --git a/lib/common.lib.php b/lib/common.lib.php index 5fa08880e..c702dfc4c 100644 --- a/lib/common.lib.php +++ b/lib/common.lib.php @@ -7,36 +7,6 @@ if (!defined('_GNUBOARD_')) exit; ** *************************************************************************/ -// multi-dimensional array에 사용자지정 함수적용 -function array_map_deep($fn, $array) -{ - if(is_array($array)) { - foreach($array as $key => $value) { - if(is_array($value)) { - $array[$key] = array_map_deep($fn, $value); - } else { - $array[$key] = call_user_func($fn, $value); - } - } - } else { - $array = call_user_func($fn, $array); - } - - return $array; -} - -// SQL Injection 대응 문자열 필터링 -function sql_escape_string($str) -{ - $pattern = '/(and|or).*(union|select|insert|update|delete|from|where|limit|create|drop).*/i'; - $replace = ''; - - $str = preg_replace($pattern, $replace, $str); - $str = call_user_func(G5_ESCAPE_FUNCTION, $str); - - return $str; -} - // 마이크로 타임을 얻어 계산 형식으로 만듦 function get_microtime() {