현재 그누보드에 접근 가능 ip체크 소스 보니까 조금 이상한거 같은데요

현재 그누보드에 접근 가능 ip체크 소스 보니까 조금 이상한거 같은데요

QA

현재 그누보드에 접근 가능 ip체크 소스 보니까 조금 이상한거 같은데요

답변 2

본문

 

            //$pat = "/({$pattern[$i]})/";

            $pattern[$i] = str_replace(".", "\.", $pattern[$i]);

            $pat = "/^{$pattern[$i]}/";

            $is_possible_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);

            if ($is_possible_ip)

                break;

 

체크 아이피를 패턴으로 검사하는데

이렇게 하면 만약 접근 가능아이피는 192.168.0.100 인데

접속하는 ip가 192.168.0.1 이어도 접근이 되게 되는거 같은데요

테스트 해봐도 그런거 같고 혹시 제가 잘못 알고 있는건가요?

이 질문에 댓글 쓰기 :

답변 2

ip 체크 코드를 아래처럼 수정해 보시기 바랍니다.

 


    // 접근가능 IP
    $cf_possible_ip = trim($config['cf_possible_ip']);
    if ($cf_possible_ip) {
        $is_possible_ip = false;
        $pattern = explode("\n", $cf_possible_ip);
        for ($i=0; $i<count($pattern); $i++) {
            $pattern[$i] = trim($pattern[$i]);
            if (empty($pattern[$i]))
                continue;
 
            $pattern[$i] = str_replace(".", "\.", $pattern[$i]);
            $pattern[$i] = str_replace("+", "[0-9\.]+", $pattern[$i]);
            $pat = "/^{$pattern[$i]}$/";
            $is_possible_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);
            if ($is_possible_ip)
                break;
        }
        if (!$is_possible_ip)
            die ("접근이 가능하지 않습니다.");
    } 

이런식으로 바꾸셔야 정상적으로 검색이 될겁니다.  

질문하신 내용과 그누보드에서 사용하는 코드는 같은방식이라 걸립니다 


    $is_admin = is_admin($member['mb_id']);
    if($is_admin != 'super') {
        // 접근가능 IP
        $cf_possible_ip = trim($config['cf_possible_ip']);
        if($cf_possible_ip) {
            $pattern = explode("\n", $cf_possible_ip);
            $patternCnt1 = count($pattern);
            for($i = 0; $i < $patternCnt1; $i++) {
                $pattern[$i] = trim($pattern[$i]);
                if(empty($pattern[$i])) continue;
                $patterns = explode(".",$pattern[$i]);
                $thisServer = explode(".",$_SERVER['REMOTE_ADDR']);
                $patternsCnt = count($patterns);
                $a=0;
                for($j=0; $j<$patternsCnt; $j++)
                {
                    if(strlen($patterns[$j]) == strlen($thisServer[$j]))
                    {
                        if(preg_match("/^".$patterns[$j]."/", $thisServer[$j]))
                            $a++;
                    }
                    else
                    {
                        if($patterns[$j] == "+"){
                            $a++;
                        }
                    }
                }
            }
            if($a < 4) die('접근이 가능하지 않습니다.');
        }
        // 접근차단 IP
        $cf_intercept_ip = trim($config['cf_intercept_ip']);
        
        if($cf_intercept_ip)
        {
            $pattern = explode("\n",$config['cf_intercept_ip']);
            $patternCnt2 = count($pattern);
            for($i = 0; $i < $patternCnt2; $i++) {
                $pattern[$i] = trim($pattern[$i]);
                if(empty($pattern[$i])) continue;
                $patterns = explode(".",$pattern[$i]);
                $thisServer = explode(".",$_SERVER['REMOTE_ADDR']);
                $patternsCnt = count($patterns);
                $b=0;
                for($j=0; $j<$patternsCnt; $j++)
                {
                    if(strlen($patterns[$j]) == strlen($thisServer[$j]))
                    {
                        if(preg_match("/^".$patterns[$j]."/", $thisServer[$j]))
                            $b++;
                    }
                    else
                    {
                        if($patterns[$j] == "+"){
                            $b++;
                        }
                    }
                }
            }
            if($b==4) die('접근 불가합니다');
        }
    }
답변을 작성하시기 전에 로그인 해주세요.
전체 3
© SIRSOFT
현재 페이지 제일 처음으로