<?php if(!defined("__XE__")) exit(); /** * @file ip_ban.addon.php * @author showjean ([email protected]) * xe version 1.8 * * @brief 입력된 아이피 (ex> 192.168.0.* , 192.168.0.1)으로부터 접근을 제한한다. **/ if($called_position != 'before_module_init' || Context::get('module')=='admin') return; // to_url 사이트가 동일 사이트일 경우 무한반복되기 때문에 애드온을 종료하고 에러 메시지 출력 // 현재 페이지 구하기 위해 https 사용여부 확인 if($addon_info->type == 'Y') { $current_page = "https://".getenv('HTTP_HOST').getenv('REQUEST_URI'); } else { $current_page = "http://".getenv('HTTP_HOST').getenv('REQUEST_URI'); } // 보내버릴 페이지일 경우 애드온 중지 if($addon_info->to_url && $addon_info->to_url === $current_page) return; // 애드온 작동 if(trim($addon_info->ban_ip) && isset($addon_info->ban_ip)) { $addr = $_SERVER['REMOTE_ADDR']; $ipaddressList = explode("\n",$addon_info->ban_ip); //Context::addHtmlHeader("Your IP:$addr"); //Context::addHtmlHeader("Your IP:$current_page"); foreach($ipaddressList as $ipaddressKey => $ipaddressValue) { preg_match("/(\d{1,3}(?:.(\d{1,3}|\*)){3})\s*(\/\/\s*(.*))?/",$ipaddressValue,$matches); if($ipaddress=trim($matches[1])) { $ip = str_replace('.', '\.', str_replace('*','(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)',$ipaddress)); if(preg_match('/^'.$ip.'$/', $addr, $matches)) { if($addon_info->to_url){ header('location:'.$addon_info->to_url); // 보내버릴 주소 } else { header("HTTP/1.1 404 Not Found"); header("Status: 404 Not Found"); } exit(); } } } } ?>
마시마로님이 올려주신 ' IP 차단 애드온 0.7 (17.09.08) ' 을 사용중인데
최근 접속이 많아진 IPv6 아이피에는 작동이 되질 않네요...
애드온을 수정해서 IPv6에도 대응되게 하려면 어떻게 해야 할까요
https://github.com/rhymix/rhymix/blob/master/common/framework/filters/IpFilter.php
라이믹스는 Rhymix\Framework\Filters\IpFilter::inRange 함수를 사용해 아이피가 범위내 속하는지 체크할 수 있습니다.(IPv4,IPv6 둘다 지원)
자체 구현된 범위체크 코드를 위 함수를 사용하게 대체하시면 됩니다. 밖이라 자세한 수정법까지 알려드리기 힘든점 양해부탁드립니다.