특정 IP만 게시판에 접근이 가능하도록 하였습니다. 채택완료
추팔소
7년 전
조회 3,215
</p>
<p><?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가</p>
<p>// 접근 허용 IP 리스트
$ok_ip_addr=array(
"123.45.678.901",
"50.135.40.11"
);</p>
<p>// 해당 게시판 테이블에 접근 허용 IP가 아니라면 돌려보냄
if($bo_table =='spe') {
$key = in_array($_SERVER[REMOTE_ADDR],$ok_ip_addr);</p>
<p> if(!$key) {
echo "차단 됨";
include_once(G5_PATH.'/_tail.php');
exit;
}
}
?></p>
<p>
위 코드 처럼 리스트에 없는 아이피라면 접근이 불가능하도록 설정 하였습니다.
그런데 이렇게 하다보면 유동 아이피인 회원도 있어 문제가 있을 것 같아 질문 드립니다.
1. 유동아이피는 4자리 중 맨 마지막 뒷자리만 바뀌는 것으로 알고 있습니다. 맞나요?
2. 그렇다면 4번째 마지막 자리만 광대역(*)으로 설정하고 싶은데, 어떻게 하면 될까요?
접근 허용 IP를 123.45.678.* 이런 식으로 설정하고 싶습니다.
댓글을 작성하려면 로그인이 필요합니다.
답변 3개
채택된 답변
+20 포인트
7년 전
아래처럼 허용할 아이피를 . 기준으로 3번째 까지만 지정해두고,
접속자의 아이피에서 3번째 까지만 검사하는 방법도 있습니다.
</p>
<p><?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// 접근 허용 IP 리스트
$ok_ip_addr=array(
"123.45.678",
"50.135.40"
);
// 해당 게시판 테이블에 접근 허용 IP가 아니라면 돌려보냄
if($bo_table =='spe') {</p>
<p> $remote_addr_arr = explode(".",$_SERVER[REMOTE_ADDR]);
unset($remote_addr_arr[3]);
$remote_addr = implode(".",$remote_addr_arr);</p>
<p> $key = in_array($remote_addr,$ok_ip_addr);
if(!$key) {
echo "차단 됨";
include_once(G5_PATH.'/_tail.php');
exit;
}
}
?></p>
<p>
로그인 후 평가할 수 있습니다
답변에 대한 댓글 3개
�
추팔소
7년 전
�
상큼쏭
7년 전
@추팔소
그러시면 DB를 활용 하셔서 하시는게 좋을것 같네요.
회원정보 테이블에 해당 회원에게 허용할 아이피를 입력할 필드를 만들고
해당 필드에 해당 아이디 회원에게 허용할 접속 아이피를 저장시킨뒤
위 소스의 $ok_ip_addr 배열에 db에서 가져온 로그인한 회원의 회원정보에 저장되있던 아이피를 받으시고,
이하 로직은 똑같이 하시면 될듯요.
그러시면 DB를 활용 하셔서 하시는게 좋을것 같네요.
회원정보 테이블에 해당 회원에게 허용할 아이피를 입력할 필드를 만들고
해당 필드에 해당 아이디 회원에게 허용할 접속 아이피를 저장시킨뒤
위 소스의 $ok_ip_addr 배열에 db에서 가져온 로그인한 회원의 회원정보에 저장되있던 아이피를 받으시고,
이하 로직은 똑같이 하시면 될듯요.
�
추팔소
7년 전
DB를 활용하는 건 저에게 너무나 어려워서 ㅠ_ㅠ
php 코드로 이용할 수 있는 방법은 없을까요?
php 코드로 이용할 수 있는 방법은 없을까요?
댓글을 작성하려면 로그인이 필요합니다.
7년 전
</p>
<p> </p>
<p><?php</p>
<p>if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가 // 접근 허용 IP 리스트</p>
<p>$ok_ip_addr=array( "123.45.678.", "50.135.40.11" ); // 해당 게시판 테이블에 접근 허용 IP가 아니라면 돌려보냄</p>
<p>
if($bo_table =='spe') {
foreach($ok_ip_addr as $k=>$v){</p>
<p> if( eregi($v,$_SERVER[REMOTE_ADDR]) ) { break; }</p>
<p> if( sizeof(ok_ip_addr) == $k+1 ) {</p>
<p> echo "차단 됨";
include_once(G5_PATH.'/_tail.php');
exit;
}
}
}</p>
<p>
?></p>
<p> </p>
<p>
로그인 후 평가할 수 있습니다
댓글을 작성하려면 로그인이 필요합니다.
7년 전
</p>
<p> </p>
<p>// 접근 허용 IP 리스트</p>
<p>
// 앞의 C class 영역만 배열로 초기화 값을 만듭니다.
$ok_ip_addr=array(
"123.45.678.",
"50.135.40."
);
// 해당 게시판 테이블에 접근 허용 IP가 아니라면 돌려보냄
if($bo_table =='spe') {</p>
<p> for ($i = 0; $i < count($ok_ip_addr); $i++) {
if (strrpos($_SERVER[REMOTE_ADDR],$ok_ip_addr[$i]) === false) {
echo "차단 됨";
include_once(G5_PATH.'/_tail.php');
exit;
}
}
}</p>
<p> </p>
<p>
와 같은 형태로 변경가능합니다.
문자열의 일부분만 체크하는 형태라고 보시면됩니다.
로그인 후 평가할 수 있습니다
답변에 대한 댓글 6개
�
추팔소
7년 전
우선 답변 감사드립니다.
테스트 삼아 제 아이피를 활용하여 "123.45.678." 식으로 해보았지만
"차단 됨" 이라고 뜹니다.
전체 아이피를 다 써봐도 "차단 됨" 문구가 뜹니다.
뭐가 문제인가요?
테스트 삼아 제 아이피를 활용하여 "123.45.678." 식으로 해보았지만
"차단 됨" 이라고 뜹니다.
전체 아이피를 다 써봐도 "차단 됨" 문구가 뜹니다.
뭐가 문제인가요?
�
플래토
7년 전
@추팔소 음.. 그러시면
if (strrpos($_SERVER[REMOTE_ADDR],$ok_ip_addr[$i]) === false) {
이부분의 내용을 일부 변경해보죠
if (strpos($_SERVER[REMOTE_ADDR],$ok_ip_addr[$i]) === false) {
로
strrpos => strpos 로
r 하나 빠진걸로 변경해보시죠
if (strrpos($_SERVER[REMOTE_ADDR],$ok_ip_addr[$i]) === false) {
이부분의 내용을 일부 변경해보죠
if (strpos($_SERVER[REMOTE_ADDR],$ok_ip_addr[$i]) === false) {
로
strrpos => strpos 로
r 하나 빠진걸로 변경해보시죠
�
추팔소
7년 전
그것도 해봤었지만 안됐습니다 ㅠㅠ
�
플래토
7년 전
echo "차단됨"을 막고
왜안되는지 비교문의 내용을 찍어보세요
그러면 원인이 보일겁니다
왜안되는지 비교문의 내용을 찍어보세요
그러면 원인이 보일겁니다
�
추팔소
7년 전
= 가 하나 더 입력되어 있었네요, 일단 오타는 수정했는데,
echo 차단 됨을 주석 처리 하고
echo strpos($_SERVER[REMOTE_ADDR],$ok_ip_addr[$i]);
이렇게 띄워보면 숫자 0 만 뜹니다.
echo 차단 됨을 주석 처리 하고
echo strpos($_SERVER[REMOTE_ADDR],$ok_ip_addr[$i]);
이렇게 띄워보면 숫자 0 만 뜹니다.
�
플래토
7년 전
@추팔소
비교연산자 == 는 문자열자체를 비교하는것이구요
=== 는 비트값까지 비교하는 내용이라 오타는 아닙니다.
그리고, echo로 출력해보라고 말씀드린부분에서 0 이 나왔다는것은 불일치
즉 , false 에 해당되는 사항이라.
echo strpos($_SERVER[REMOTE_ADDR],$ok_ip_addr[$i]);
이렇게 확인하기보다는
echo "reqeust addr : [".$_SERVER[REMOTE_ADDR]."]<br>";
echo "valid addr : [".$ok_ip_addr[$i]."]<br>";
와 같이 확인하는게 더 깔끔하게 확인 가능하실거빈다.
팁으로 [ ]를 묶는건 공백인지, null인지 의 문자는 눈으로 확인이 어려우니 앞뒤에 넣어주면
좀더 깔끔한 확인이 가능합니다.
비교연산자 == 는 문자열자체를 비교하는것이구요
=== 는 비트값까지 비교하는 내용이라 오타는 아닙니다.
그리고, echo로 출력해보라고 말씀드린부분에서 0 이 나왔다는것은 불일치
즉 , false 에 해당되는 사항이라.
echo strpos($_SERVER[REMOTE_ADDR],$ok_ip_addr[$i]);
이렇게 확인하기보다는
echo "reqeust addr : [".$_SERVER[REMOTE_ADDR]."]<br>";
echo "valid addr : [".$ok_ip_addr[$i]."]<br>";
와 같이 확인하는게 더 깔끔하게 확인 가능하실거빈다.
팁으로 [ ]를 묶는건 공백인지, null인지 의 문자는 눈으로 확인이 어려우니 앞뒤에 넣어주면
좀더 깔끔한 확인이 가능합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
이 코드에, 회원 아이디와 저 세 자리 아이피를 묶고 싶은데 그렇게 하려면 어떻게 해야하나요?
예를 들면,
A회원 (123.45.678)
B회원 (50.135.40).
이렇게 하고 싶은 이유가, 유동 아이피인 회원 분들이 대다수인데
네 자리 중 뒤에 두 자리가 바뀌는 경우가 많거든용 ㅠ