diff --git a/bbs/login_check.php b/bbs/login_check.php index a66ed1c44..fadee0bbc 100644 --- a/bbs/login_check.php +++ b/bbs/login_check.php @@ -67,7 +67,7 @@ if ($auto_login) { if ($url) { // url 체크 - check_url_host($url); + check_url_host($url, '', G5_URL, true); $link = urldecode($url); // 2003-06-14 추가 (다른 변수들을 넘겨주기 위함) diff --git a/bbs/member_confirm.php b/bbs/member_confirm.php index e5abe169e..d3631e267 100644 --- a/bbs/member_confirm.php +++ b/bbs/member_confirm.php @@ -17,7 +17,7 @@ include_once('./_head.sub.php'); $url = clean_xss_tags($_GET['url']); // url 체크 -check_url_host($url); +check_url_host($url, '', G5_URL, true); $url = get_text($url); diff --git a/lib/common.lib.php b/lib/common.lib.php index 03473b27a..8bf11615f 100644 --- a/lib/common.lib.php +++ b/lib/common.lib.php @@ -3008,7 +3008,7 @@ function check_password($pass, $hash) } // 동일한 host url 인지 -function check_url_host($url, $msg='', $return_url=G5_URL) +function check_url_host($url, $msg='', $return_url=G5_URL, $is_redirect=false) { if(!$msg) $msg = 'url에 타 도메인을 지정할 수 없습니다.'; @@ -3018,7 +3018,7 @@ function check_url_host($url, $msg='', $return_url=G5_URL) $is_host_check = false; // url을 urlencode 를 2번이상하면 parse_url 에서 scheme와 host 값을 가져올수 없는 취약점이 존재함 - if ( !isset($p['host']) && urldecode($url) != $url ){ + if ( $is_redirect && !isset($p['host']) && urldecode($url) != $url ){ $i = 0; while($i <= 3){ $url = urldecode($url); @@ -3040,7 +3040,7 @@ function check_url_host($url, $msg='', $return_url=G5_URL) //php 5.6.29 이하 버전에서는 parse_url 버그가 존재함 //php 7.0.1 ~ 7.0.5 버전에서는 parse_url 버그가 존재함 - if ( (isset($p['host']) && $p['host']) ) { + if ( $is_redirect && (isset($p['host']) && $p['host']) ) { $bool_ch = false; foreach( array('user','host') as $key) { if ( isset( $p[ $key ] ) && strpbrk( $p[ $key ], ':/?#@' ) ) {