From e0cdd463f48784e5f2c04670c68442cf12761d08 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Tue, 2 Jan 2024 23:20:33 +0900 Subject: [PATCH] Fix #2252 add option to whitelist an IP/range in spamfilter module --- modules/spamfilter/lang/en.php | 2 ++ modules/spamfilter/lang/ko.php | 2 ++ modules/spamfilter/spamfilter.admin.controller.php | 3 ++- modules/spamfilter/spamfilter.model.php | 10 +++++++++- modules/spamfilter/tpl/config_block.html | 11 +++++++++-- 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/modules/spamfilter/lang/en.php b/modules/spamfilter/lang/en.php index 0f91ae245..af87ce170 100644 --- a/modules/spamfilter/lang/en.php +++ b/modules/spamfilter/lang/en.php @@ -39,6 +39,8 @@ $lang->cmd_ipv6_block_range = 'IPv6 Block Range'; $lang->cmd_block_range_self = 'single IP address only'; $lang->cmd_block_range_help = 'This option allows you to block an entire range of IP addresses when a spammer is found.
Caution: if you block an excessively wide range, you may also end up blocking innocent users.'; $lang->cmd_block_range = 'IP addresses with the same %d last blocks'; +$lang->cmd_spamfilter_except_ip = 'Whitelist IP'; +$lang->cmd_spamfilter_except_ip_help = 'IPs or IP ranges entered here will not be blocked.
e.g. 123.45.67.89, 123.45.67.0/24, 123.45.67.*'; $lang->unit_write_count = 'times'; $lang->add = 'Add'; $lang->msg_duplicate = 'Duplicate'; diff --git a/modules/spamfilter/lang/ko.php b/modules/spamfilter/lang/ko.php index 1f95d6b41..82f13a8f7 100644 --- a/modules/spamfilter/lang/ko.php +++ b/modules/spamfilter/lang/ko.php @@ -39,6 +39,8 @@ $lang->cmd_ipv6_block_range = 'IPv6 차단 범위'; $lang->cmd_block_range_self = '해당 IP만 차단'; $lang->cmd_block_range_help = '스패머 발견시 비슷한 대역의 IP를 한꺼번에 차단할 수 있습니다. 숫자가 작을수록 광범위하게 차단됩니다.
지나치게 광범위하게 차단하면 정상적인 사용자에게 피해가 발생할 수 있으니 주의하시기 바랍니다.'; $lang->cmd_block_range = '마지막 %d자리가 같은 IP를 모두 차단'; +$lang->cmd_spamfilter_except_ip = '예외 IP'; +$lang->cmd_spamfilter_except_ip_help = '차단하지 않을 IP 또는 IP 대역을 한 줄에 하나씩 입력하십시오.
예: 123.45.67.89, 123.45.67.0/24, 123.45.67.*'; $lang->unit_write_count = '회'; $lang->add = '추가'; $lang->msg_duplicate = '이미 존재합니다.'; diff --git a/modules/spamfilter/spamfilter.admin.controller.php b/modules/spamfilter/spamfilter.admin.controller.php index ab17dd9ad..e4887f600 100644 --- a/modules/spamfilter/spamfilter.admin.controller.php +++ b/modules/spamfilter/spamfilter.admin.controller.php @@ -20,7 +20,7 @@ class SpamfilterAdminController extends Spamfilter $config = ModuleModel::getModuleConfig('spamfilter') ?: new stdClass; // Get the default information - $args = Context::gets('limits', 'limits_interval', 'limits_count', 'ipv4_block_range', 'ipv6_block_range', 'custom_message'); + $args = Context::gets('limits', 'limits_interval', 'limits_count', 'ipv4_block_range', 'ipv6_block_range', 'except_ip', 'custom_message'); // Set default values if($args->limits != 'Y') @@ -35,6 +35,7 @@ class SpamfilterAdminController extends Spamfilter { $args->ipv6_block_range = ''; } + $args->except_ip = array_map('trim', preg_split('/[\n,]/', trim($args->except_ip ?? ''), -1, \PREG_SPLIT_NO_EMPTY)); $args->limits_interval = intval($args->limits_interval); $args->limits_count = intval($args->limits_count); $args->custom_message = escape(utf8_trim($args->custom_message)); diff --git a/modules/spamfilter/spamfilter.model.php b/modules/spamfilter/spamfilter.model.php index 7318109cc..feee6bf42 100644 --- a/modules/spamfilter/spamfilter.model.php +++ b/modules/spamfilter/spamfilter.model.php @@ -169,6 +169,14 @@ class SpamfilterModel extends Spamfilter $limit_count = $config->limits_count ?: 3; $interval = $config->limits_interval ?: 10; + if (!empty($config->except_ip)) + { + if (Rhymix\Framework\Filters\IpFilter::inRanges(\RX_CLIENT_IP, $config->except_ip)) + { + return new BaseObject(); + } + } + $count = $this->getLogCount($interval); // Ban the IP address if the interval is exceeded @@ -183,7 +191,7 @@ class SpamfilterModel extends Spamfilter $suffix = $config->ipv6_block_range ?: ''; } - $oSpamFilterController = getController('spamfilter'); + $oSpamFilterController = SpamfilterController::getInstance(); $oSpamFilterController->insertIP(\RX_CLIENT_IP . $suffix, 'AUTO-DENIED : Over limit'); return new BaseObject(-1, 'msg_alert_registered_denied_ip'); } diff --git a/modules/spamfilter/tpl/config_block.html b/modules/spamfilter/tpl/config_block.html index aca0b042d..da08f708c 100644 --- a/modules/spamfilter/tpl/config_block.html +++ b/modules/spamfilter/tpl/config_block.html @@ -1,6 +1,6 @@
-
+ @@ -16,7 +16,7 @@ {$lang->cmd_yes}

@@ -60,6 +60,13 @@

{$lang->cmd_block_range_help}

+
+ +
+ +

{$lang->cmd_spamfilter_except_ip_help}

+
+