현재 그누보드에 접근 가능 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('접근 불가합니다');
}
}
답변을 작성하시기 전에 로그인 해주세요.