Develop

[php] XE 관리자 IP대역 설정 오류 해결법

by hooni posted Feb 10, 2014
?

Shortcut

PrevPrev Article

NextNext Article

ESCClose

Larger Font Smaller Font Up Down Go comment Print
관리자 IP를 풀IP로 지정하는건 제대로 동작하나
203.* , 203.255.255.* 와 같이 대역으로 설정하면 관리자 IP대역을 맞게 설정하고
대역내에 들어가는 IP래도
현재는 소스코드가 잘못 작성되어 접근이 차단되는 버그가 있습니다.
 
오류해결 방법은(1.7.3.4기준)
 
./modules/member/member.admin.model.php 파일의
292라인의 getMemberAdminIPCheck() 함수를 아래로 바꿔주시면 됨.
function getMemberAdminIPCheck()
{
    $db_info = Context::getDBInfo();
    $admin_ip_list = $db_info->admin_ip_list;
    $admin_ip_list = explode(",",$admin_ip_list);
    $oMemberModel = &getModel('member');
    $ip = $_SERVER['REMOTE_ADDR'];
    $falg = false;
    foreach($admin_ip_list as $admin_ip_list_key => $admin_ip_value)
    {
        if(preg_match('/^\d{1,3}(?:.(\d{1,3}|\*)){3}\s*$/',
            $admin_ip_value, $matches) && $ip)
        {
            $admin_ip = $matches[0];
            /* 관리자 IP대역 오류수정전 원본
            $admin_ip = str_replace('*','',$admin_ip);
            $admin_ip_patterns[] = preg_quote($admin_ip);    
            $admin_ip_pattern = '/^('.implode($admin_ip_patterns,'|').')/';
            */
            $admin_ip_pattern = preg_quote($admin_ip);    
            $admin_ip_pattern = "/^".str_replace('\\*','\\d{1,3}',
                $admin_ip_pattern) . "/";

            if(preg_match($admin_ip_pattern, $ip, $matches)) return true;
            $flag = true;
        }
    }
    if(!$flag) return true;
    return false;
}