Extra Form
PHP PHP 7.4
CMS Rhymix 2.0
<?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에도 대응되게 하려면 어떻게 해야 할까요

 

 

 

  • Lv16

    https://github.com/rhymix/rhymix/blob/master/common/framework/filters/IpFilter.php

    라이믹스는 Rhymix\Framework\Filters\IpFilter::inRange 함수를 사용해 아이피가 범위내 속하는지 체크할 수 있습니다.(IPv4,IPv6 둘다 지원)

     

    자체 구현된 범위체크 코드를 위 함수를 사용하게 대체하시면 됩니다. 밖이라 자세한 수정법까지 알려드리기 힘든점 양해부탁드립니다.