조언을 구합니다
CMS/프레임워크 | Rhymix 2.0 |
---|---|
개발 언어 | PHP 7.4 |
통신사 ip 대역으로 접속 했을 경우 댓글창을 없애버리는걸 진행 중입니다...!!!
{@
$band = explode(".", getenv('REMOTE_ADDR'));
$range = $band[0].$band[1];
$range_ = $band[0].$band[1].$band[2];
if(!$is_logged && ($range == 203226 || $range == 211234 || ($range >= 22332 && $range <= 22363) || $range_ == 3970 || $range == 11070 || $range == 175223 || $range == 211246 || $range == 118235 || $range == 211246 || $range == 6143 || $range == 211234 || $range == 106102 || $range == 117111 || $range == 21136 || $range == 106101)):
$rangein=true;
else:
$rangein=false;
endif;
}
제가 작성했었던 통신사 ip 대역을 이용해 위와 같이 코드를 짜보았는데 부실한 부분이 있나 여쭙니다...!!
댓글 7
if(in_array($range, $arrayTrueList)):
else:
endif;
이런식으로 가는게 더 나을듯합니다.
$ranges = array(
'203.226.*.*',
'211.234.*.*',
... 중략 ...
);
$rangein = Rhymix\Framework\Filters\IpFilter::inRanges($_SERVER['REMOTE_ADDR'], $ranges);
이렇게 쓰면 보기도 훨씬 편하고, IP 대역 목록을 관리하기도 편하고, 두 자리짜리와 세 자리짜리가 우연히 붙어서 엉뚱한 대역을 가리키게 되는 문제도 미리 방지할 수 있습니다.
IP 대역은 203.226.*.* 라고 쓰셔도 되고, 전문용어(?)로 203.226.0.0/16 이라고 쓰셔도 라이믹스는 잘 알아듣습니다. 요즘 IP 주소 고갈 때문에 대기업들마저 두 자리 대역을 온전히 할당받지 못하고 /18이나 /20 등으로 쪼개는 경우가 많은데, 이런 것까지 정확하게 판단할 수 있지요.
결론: 이미 있는 함수를 최대한 활용합니다.^^
이 방법대로 내부 함수를 이용하려고 오랫만에 스킨 폴더를 열었더니 현기증이 나네요.. ㅎㅎ
$band = explode(".",getenv('REMOTE_ADDR'));
$range = $band[0].$band[1];
$range_ = $band[0].$band[1].$band[2];
if(($range_ >= 203226192 && $range_ <= 203226252) || ($range_ >= 211234128 && $range_ <= 211234239) || ($range_ >= 211234244 && $range_ <= 211234255) || ($range >= 27160 && $range <= 27183) || ($range >= 22332 && $range <= 22363)):
$rangein=true;
elseif($range == 397 || $range == 11070 || $range == 175223 || $range == 211246 || $range == 118235 || $range == 211246):
$rangein=true;
elseif($range == 6143 || $range == 106102 || $range == 117111 || $range == 106101 || ($range_ >= 2112340 && $range_ <= 2112349) || ($range_ >= 21123410 && $range_ <= 21123495) || ($range_ >= 21136128 && $range_ <= 21136159) || ($range_ >= 21136224 && $range_ <= 21136255)):
$rangein=true;
else:
$rangein=false;
endif;
}
u플러스 대역의 211.234.0.0 ~ 211.234.95.255 에서 자리수가 맞지 않아 문제가 발생했더라구요 ㅋㅋ,,,
특정 ip 에서 개인이 아닌 통신사 아이피로 잡히는 문제가 생겨서 위와 수정 했었는데요...
array 방식으로 수정 하려할때 /11 /17 등등으로 딱 정확히 나눌수 없을땐 일일히 입력해 주어야 할까요?
나누어 떨어지지 않는 IP 대역이란 없습니다. 만약 /18과 /19 사이 어딘가에 걸쳐져 있는 것처럼 보이는 대역이 있다면 처음부터 잘못 입력되었거나, 인접한 대역을 각각 입력하기 귀찮아서 한 번에 적은 것이겠지요. 언급하신 유플러스 IP 대역은 211.234.0.0/18과 211.234.64.0/19를 함께 적어 놓은 것입니다.
라이믹스에서는 그냥 211.234.0.0-211.234.95.255라고 써도 됩니다.
매뉴얼 참고: https://rhymix.org/manual/misc/ipfilter