diff --git a/modules/spamfilter/spamfilter.controller.php b/modules/spamfilter/spamfilter.controller.php index 45ff85fa9..e5a88ad1e 100644 --- a/modules/spamfilter/spamfilter.controller.php +++ b/modules/spamfilter/spamfilter.controller.php @@ -164,25 +164,44 @@ class spamfilterController extends spamfilter */ function insertIP($ipaddress_list, $description = null) { - $regExr = "/^((\d{1,3}(?:.(\d{1,3}|\*)){3})\s*(\/\/(.*)\s*)?)*\s*$/"; - if(!preg_match($regExr,$ipaddress_list)) return new Object(-1, 'msg_invalid'); - $ipaddress_list = str_replace("\r","",$ipaddress_list); - $ipaddress_list = explode("\n",$ipaddress_list); - foreach($ipaddress_list as $ipaddressValue) + if (!is_array($ipaddress_list)) { - $args = new stdClass(); - preg_match("/(\d{1,3}(?:.(\d{1,3}|\*)){3})\s*(\/\/(.*)\s*)?/",$ipaddressValue,$matches); - if($ipaddress=trim($matches[1])) + $ipaddress_list = array_map('trim', explode("\n", $ipaddress_list)); + } + $fail_list = ''; + $output = null; + + foreach ($ipaddress_list as $ipaddress) + { + $args = new stdClass; + if (preg_match('@^(.+?)(?://|#)(.*)$@', $ipaddress, $matches)) + { + $args->ipaddress = trim($matches[1]); + $args->description = trim($matches[2]); + } + else { $args->ipaddress = $ipaddress; - if(!$description && $matches[4]) $args->description = $matches[4]; - else $args->description = $description; + $args->description = $description; } + + if (!Rhymix\Framework\Filters\IpFilter::validateRange($args->ipaddress)) + { + return new Object(-1, 'msg_invalid'); + } + $output = executeQuery('spamfilter.insertDeniedIP', $args); - if(!$output->toBool()) $fail_list .= $ipaddress.'
'; + if (!$output->toBool()) + { + $fail_list .= $args->ipaddress . '
'; + } } - - $output->add('fail_list',$fail_list); + + if ($output) + { + $output->add('fail_list', $fail_list); + } + return $output; } diff --git a/modules/spamfilter/spamfilter.model.php b/modules/spamfilter/spamfilter.model.php index e39651597..452cc5a4c 100644 --- a/modules/spamfilter/spamfilter.model.php +++ b/modules/spamfilter/spamfilter.model.php @@ -32,9 +32,8 @@ class spamfilterModel extends spamfilter $args = new stdClass(); $args->sort_index = "regdate"; $args->page = Context::get('page')?Context::get('page'):1; - $output = executeQuery('spamfilter.getDeniedIPList', $args); + $output = executeQueryArray('spamfilter.getDeniedIPList', $args); if(!$output->data) return; - if(!is_array($output->data)) return array($output->data); return $output->data; } @@ -43,18 +42,20 @@ class spamfilterModel extends spamfilter */ function isDeniedIP() { - $ipaddress = $_SERVER['REMOTE_ADDR']; - $ip_list = $this->getDeniedIPList(); if(!count($ip_list)) return new Object(); - - $count = count($ip_list); - for($i=0;$i<$count;$i++) + + $ip_ranges = array(); + foreach ($ip_list as $ip_range) { - $ip = str_replace('.', '\.', str_replace('*','(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)',$ip_list[$i]->ipaddress)); - if(preg_match('/^'.$ip.'$/', $ipaddress, $matches)) return new Object(-1,'msg_alert_registered_denied_ip'); + $ip_ranges[] = $ip_range->ipaddress; } - + + if (Rhymix\Framework\Filters\IpFilter::inRanges(\RX_CLIENT_IP, $ip_ranges)) + { + return new Object(-1, 'msg_alert_registered_denied_ip'); + } + return new Object(); }