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

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

QA

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

본문

 

            //$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('접근 불가합니다');
        }
    }
답변을 작성하시기 전에 로그인 해주세요.
전체 123,673 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT