특정 아이피만 관리자 페이지 접속 시 다중접속 문의드립니다.
본문
1. 단일 아이피
$possible_ip = 'xxx.xxx.xxx.xxx'; // 아이피 입력
if ($_SERVER['REMOTE_ADDR'] != $possible_ip) {
alert('접근 권한이 없습니다.', G5_URL);
}
2. 다중 아이피 (콤마로 구분해서 추가)
$possible_ip = array("xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx");
if (!in_array($_SERVER['REMOTE_ADDR'], $possible_ip)){
alert('접근 권한이 없습니다.', G5_URL);
}
3. 아이피 대역대로 지정 (마지막 아이피 3자리가 계속 바뀔 경우)
예를 들어 아이피가 123.456.789.000 이면 마지막 000을 제외한 123.456.789만 입력
if(!preg_match("/^xxx.xxx.xxx/",$_SERVER['REMOTE_ADDR'])) {
alert('접근 권한이 없습니다.', G5_URL);
}
위와 같이 특정 아이피 접속 허용하는 방법이 있는데 위 방법중 단일아이피가 접속되면서 아이피 대역대로 지정되도록 하고 싶은데 방법이 있는지 문의드립니다.
ex) 123.234.345.678 아이피 접속 허용하면서 987.555.555 아이피 대역대도 접속이 되게 하려면?
방법이 있는지 문의드립니다.
답변 2
/extend/user.config.php
// 관리자 ip 접근 추가 시작
$admin_ip = array(
'123.234.345.678', // 단일 아이피
'987.555.555.*' // 대역폭
);
add_event('admin_common', 'get_admin_ip');
// 관리자 ip 접근 추가 끝
// 특정 IP에서만 사용이 가능하도록 조건식을 추가하기 위함 (gnuwiz)
function get_admin_ip()
{
global $admin_ip;
$client_ip = $_SERVER['REMOTE_ADDR'];
foreach ($admin_ip as $ip) {
// IP에 와일드카드 '*'가 포함되어 있는지 확인합니다
if (strpos($ip, '*') !== false) {
$pattern = str_replace('*', '\d{1,3}', $ip);
if (preg_match('/^'.$pattern.'$/', $client_ip)) {
return; // IP 일치, 액세스 허용
}
} elseif ($ip === $client_ip) {
return; // IP가 정확하게 일치함, 액세스 허용됨
}
}
session_unset(); // 모든 세션변수를 언레지스터 시켜줌
session_destroy(); // 세션해제함
alert('접근 권한이 없습니다.', G5_URL);
}
이렇게 해보는건 어떨까요?
$possible_ip = '123.234.345.678'; // 단일 아이피 입력
$possible_ip_range = '987.555.555'; // 아이피 대역대 입력 (처음 세자리) '987.555.555.xxx' 아이피 대역대의 접근이 허용
$ip_parts = explode('.', $_SERVER['REMOTE_ADDR']); // 접속 아이피를 '.'으로 구분하여 배열로 저장
// '123.234.345.678' 아이피와 '987.555.555.xxx' 아이피 대역대의 접근이 허용
if ($_SERVER['REMOTE_ADDR'] != $possible_ip && implode('.', array_slice($ip_parts, 0, 3)) != $possible_ip_range) {
alert('접근 권한이 없습니다.', G5_URL);
}