diff --git a/modules/spamfilter/lang/ko.php b/modules/spamfilter/lang/ko.php index 26f96ada3..442f5f1aa 100644 --- a/modules/spamfilter/lang/ko.php +++ b/modules/spamfilter/lang/ko.php @@ -22,11 +22,16 @@ $lang->msg_alert_limited_message_by_config = '%s 초 이내에 쪽지 발송은 $lang->msg_alert_denied_word = '"%s"는 사용 금지된 단어입니다.'; $lang->msg_alert_registered_denied_ip = '금지 IP에 등록되어 정상적인 활동에 제한을 받게 됐습니다. 사이트 관리자에게 문의 바랍니다.'; $lang->msg_alert_trackback_denied = '한 글에는 하나의 트랙백만 허용됩니다.'; -$lang->cmd_interval = '10초 동안 3회 이상 글을 작성하면 스패머로 간주하시겠습니까? 글, 댓글 작성과 엮인글 발송, 쪽지 발송을 차단합니다.'; -$lang->cmd_check_trackback = '하나의 글에 2회 이상 엮인글을 등록하면 스패머로 간주하시겠습니까? 엮인글을 차단합니다.'; +$lang->cmd_interval = '글, 댓글 스팸 차단'; +$lang->cmd_interval_help = '10초 동안 3회 이상 글이나 댓글을 작성하면 스패머로 간주하고 글, 댓글 작성과 엮인글 발송, 쪽지 발송을 차단합니다.'; +$lang->cmd_check_trackback = '트랙백 스팸 차단'; +$lang->cmd_check_trackback_help = '하나의 글에 2회 이상 엮인글을 등록하면 스패머로 간주하고 엮인글을 차단합니다.
트랙백 모듈이 설치되어 있는 경우에만 적용됩니다.'; +$lang->cmd_ipv4_block_range = 'IPv4 차단 범위'; +$lang->cmd_ipv6_block_range = 'IPv6 차단 범위'; +$lang->cmd_block_range_self = '해당 IP만 차단'; +$lang->cmd_block_range_help = '스패머 발견시 비슷한 대역의 IP를 한꺼번에 차단할 수 있습니다.
지나치게 광범위하게 차단하면 정상적인 사용자에게 피해가 발생할 수 있으니 주의하시기 바랍니다.'; +$lang->cmd_block_range = '마지막 %s자리가 같은 IP를 모두 차단'; $lang->add = '추가'; -$lang->yes = '예'; -$lang->no = '아니오'; $lang->msg_duplicate = '이미 존재합니다.'; $lang->msg_invalid_ip = 'IP 주소 형식이 올바르지 않습니다.'; $lang->msg_invalid_word = '스팸 키워드는 2~40자 사이여야 합니다.'; diff --git a/modules/spamfilter/spamfilter.admin.controller.php b/modules/spamfilter/spamfilter.admin.controller.php index 485a51a88..29cdc3fe7 100644 --- a/modules/spamfilter/spamfilter.admin.controller.php +++ b/modules/spamfilter/spamfilter.admin.controller.php @@ -17,16 +17,32 @@ class spamfilterAdminController extends spamfilter function procSpamfilterAdminInsertConfig() { // Get the default information - $argsConfig = Context::gets('limits','check_trackback'); - $flag = Context::get('flag'); - //interval, limit_count - if($argsConfig->check_trackback!='Y') $argsConfig->check_trackback = 'N'; - if($argsConfig->limits!='Y') $argsConfig->limits = 'N'; + $args = Context::gets('limits', 'check_trackback', 'ipv4_block_range', 'ipv6_block_range'); + + // Set default values + if ($args->limits != 'Y') + { + $args->limits = 'N'; + } + if ($args->check_trackback != 'Y') + { + $args->check_trackback = 'N'; + } + if (!preg_match('#^/(\d+)$#', $args->ipv4_block_range, $matches) || $matches[1] > 32 || $matches[1] < 16) + { + $args->ipv4_block_range = ''; + } + if (!preg_match('#^/(\d+)$#', $args->ipv6_block_range, $matches) || $matches[1] > 128 || $matches[1] < 64) + { + $args->ipv6_block_range = ''; + } + // Create and insert the module Controller object $oModuleController = getController('module'); - $moduleConfigOutput = $oModuleController->insertModuleConfig('spamfilter',$argsConfig); + $moduleConfigOutput = $oModuleController->insertModuleConfig('spamfilter', $args); if(!$moduleConfigOutput->toBool()) return $moduleConfigOutput; + $this->setMessage('success_updated'); $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispSpamfilterAdminConfigBlock'); $this->setRedirectUrl($returnUrl); } diff --git a/modules/spamfilter/spamfilter.model.php b/modules/spamfilter/spamfilter.model.php index 43b1ca9d9..623b8714c 100644 --- a/modules/spamfilter/spamfilter.model.php +++ b/modules/spamfilter/spamfilter.model.php @@ -111,10 +111,20 @@ class spamfilterModel extends spamfilter // Ban the IP address if the interval is exceeded if($count>=$limit_count) { + if (\RX_CLIENT_IP_VERSION == 4) + { + $suffix = $config->ipv4_block_range ?: ''; + } + else + { + $suffix = $config->ipv6_block_range ?: ''; + } + $oSpamFilterController = getController('spamfilter'); - $oSpamFilterController->insertIP(\RX_CLIENT_IP, 'AUTO-DENIED : Over limit'); + $oSpamFilterController->insertIP(\RX_CLIENT_IP . $suffix, 'AUTO-DENIED : Over limit'); return new Object(-1, 'msg_alert_registered_denied_ip'); } + // If the number of limited posts is not reached, keep creating. if($count) { diff --git a/modules/spamfilter/tpl/config_block.html b/modules/spamfilter/tpl/config_block.html index 3403bf55a..f1965cd17 100644 --- a/modules/spamfilter/tpl/config_block.html +++ b/modules/spamfilter/tpl/config_block.html @@ -5,32 +5,64 @@
  • {$lang->cmd_denied_word}
  • {$lang->cmd_config_block}
  • -
    +
    -

    {$lang->cmd_interval}

    - - + +
    + + +

    {$lang->cmd_interval_help}

    +
    -

    {$lang->cmd_check_trackback}

    - - + +
    + + +

    {$lang->cmd_check_trackback_help}

    +
    +
    +
    + +
    + +

    {$lang->cmd_block_range_help}

    +
    +
    +
    + +
    + +

    {$lang->cmd_block_range_help}

    +