채택완료

현재 그누보드에 접근 가능 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개

채택된 답변
+20 포인트

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

Copy
// 접근가능 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 ("접근이 가능하지 않습니다.");    }

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

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

Copy
$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('접근 불가합니다');        }    }

답변을 작성하려면 로그인이 필요합니다.