본문 바로가기
웹프로그램

[PHP] 보안 국내 IP 대역만 접속 하도록 응용

by 세이박스 2009. 4. 10.
반응형


국내 아이피 대역을 확인 하실려면
https://ip.nida.kr/ip_cate_stat/stat_05_04.act

에서 확인 가능하며 엑셀 파일로도 다운 가능 합니다.
https://ip.nida.kr/ip_cate_stat/stat_05_04_toexcel.act

다운 받은 엑셀 파일내용 중 시작IP 와 마지막 IP 값을
각 자리수가 3자리가 되도록 수정후 . 점을 제거 합니다.
202.6.95.0 인경우 202006095000 처럼 바뀌겠군요.
이렇게 바뀐 값을 "시작IP_마지막IP" 처럼 변경해서 배열로 담습니다.
저의 경우 에디트 플러스를 활용 했습니다.
$ipgroup = array("2020060950000_202006095255","202014103000_202014103255");
처럼 배열로 담습니다.
이후 추가되는 IP만 배열에 계속 추가 해주면 됩니다.
이와 같은 변경하는 작업을 어럽게 느끼시는 분을 위해 제가 오늘 날짜로 올라온것 까지 작업해서 첨부 해놨습니다.
첨부파일 다운받으실려면 회원가입후 이메일 인증 받으시고 등업요청후 제가 승인하면 다운 가능 해 집니다.
워낙 광고 도배하는 회원이 있어서 이와 같은 복잡한 절차를 거치도록 했으니 양해 바랍니다.

이제 저 배열을 활용하기만 하면 되겠군요.
접속자 IP를 받아서 비교를 한번 해보겠습니다.
$userip = getenv("REMOTE_ADDR");
//. 점으로 구분해서 변수로 담습니다.
$tmpuserip = explode(".",$userip);
//str_pad 함수를 이용해서 자리수를 "0"으로 채워 하나의 값으로 합칩니다.
$userip = str_pad((int)$tmpuserip[0],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[1],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[2],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[3],3,"0",STR_PAD_LEFT);
//배열 IP만큼 돌립니다.
for($i=0;$i<count($ipgroup);$i++) {
 //변수값을 분리합니다.
 $tmpip = split("_",$ipgroup[$i]);
 //접속자 IP가 시작IP값보다 크거나 마지막 IP보다 작은 값이면 포함되는 값이므로 차단
 if($tmpip[0]<=$ip || $tmpip[1]>=$ip) {
  echo "국내 IP만 접속 허용합니다.";
  exit;
 }   
}
배열 값은 "대역 시작 IP _ 대역 끝 IP" 로 저장 되어 있습니다.
따라서 접속한 사용자의 IP를 받아서 루프를 돌며 해당 대역에 포함되는지 체크하시면 됩니다.

참, IP6 IP에 대해서는 별도로 처리 하셔야함을 잊지 마세요! ^^
반응형