쪽지 발송 시 스팸필터가 작동하도록 개선

- communication.sendMessage 트리거 추가
- 쪽지 발송 차단 시 메시지 추가
This commit is contained in:
SMaker 2013-11-15 17:22:30 +09:00
parent a5f408e05f
commit 6d8137bfc9
5 changed files with 76 additions and 4 deletions

View file

@ -194,6 +194,19 @@ class communicationController extends communication
$receiver_args->readed = 'N';
$receiver_args->regdate = date("YmdHis");
// Call a trigger (before)
$trigger_args = new stdClass();
$trigger_args->sender_srl = $sender_srl;
$trigger_args->receiver_srl = $receiver_srl;
$trigger_args->title = $title;
$trigger_args->content = $content;
$trigger_args->sender_log = $sender_log;
$triggerOutput = ModuleHandler::triggerCall('communication.sendMessage', 'before', $trigger_args);
if(!$triggerOutput->toBool())
{
return $triggerOutput;
}
$oDB = DB::getInstance();
$oDB->begin();
@ -216,6 +229,14 @@ class communicationController extends communication
return $output;
}
// Call a trigger (after)
$triggerOutput = ModuleHandler::triggerCall('communication.sendMessage', 'after', $trigger_args);
if(!$triggerOutput->toBool())
{
$oDB->rollback();
return $triggerOutput;
}
// create a flag that message is sent (in file format)
$flag_path = './files/member_extra_info/new_message_flags/' . getNumberingPath($receiver_srl);
FileHandler::makeDir($flag_path);

View file

@ -133,7 +133,7 @@
<value xml:lang="vi"><![CDATA[Tất cả những bài viết trong thời gian giới hạn sẽ bị chặn.]]></value>
</item>
<item name="about_limit_count">
<value xml:lang="ko"><![CDATA[지정된 시간 내에 제한수를 넘겨서 글 작성을 시도하면 스팸으로 인식, 해당 IP의 글 작성, 댓글 작성, 트랙백 발송 등을 금지합니다.]]></value>
<value xml:lang="ko"><![CDATA[지정된 시간 내에 제한수를 넘겨서 글 작성을 시도하면 스팸으로 인식, 해당 IP의 글 작성, 댓글 작성, 트랙백 발송, 쪽지 발송 등을 금지합니다.]]></value>
<value xml:lang="en"><![CDATA[If exceeded the posting limitation,
that IP will be regarded as a spam, thus will have limitations on posting articles, comments, and trackbacks.]]></value>
<value xml:lang="jp"><![CDATA[指定した時間に制限数を超える書き込みが行われるとスパムとして認識し、該当IPを禁止します。]]></value>
@ -204,6 +204,9 @@ l'article qui comporte le mot ne sera pas affichagé.]]></value>
<value xml:lang="tr"><![CDATA[%s saniyede bir yazı göndermek mümkün değildir.\n Denemeyi sürdürürseniz, IP adresiniz kara listeye alınacaktır.]]></value>
<value xml:lang="vi"><![CDATA[Không được phép gửi bài thứ 2 trong khoảng thời gian %s giây.\n Nếu bạn cứ tiếp tục, IP của bạn sẽ bị thêm vào danh sách IP bị cấm.]]></value>
</item>
<item name="msg_alert_limited_message_by_config">
<value xml:lang="ko"><![CDATA[%s 초 이내에 쪽지 발송은 금지 됩니다. 계속 시도하면 금지 IP에 등록될 수 있습니다.]]></value>
</item>
<item name="msg_alert_denied_word">
<value xml:lang="ko"><![CDATA["%s"는 사용 금지된 단어입니다.]]></value>
<value xml:lang="en"><![CDATA[The word "%s" is not allowed.]]></value>
@ -241,7 +244,7 @@ l'article qui comporte le mot ne sera pas affichagé.]]></value>
<value xml:lang="vi"><![CDATA[Chỉ cho phép một liên kết Web trên một bài viết.]]></value>
</item>
<item name="cmd_interval">
<value xml:lang="ko"><![CDATA[10초 동안 3회 이상 글을 작성하면 스패머로 간주하시겠습니까? 글, 댓글 작성과 엮인글 발송을 차단합니다.]]></value>
<value xml:lang="ko"><![CDATA[10초 동안 3회 이상 글을 작성하면 스패머로 간주하시겠습니까? 글, 댓글 작성과 엮인글 발송, 쪽지 발송을 차단합니다.]]></value>
<value xml:lang="en"><![CDATA[Do you want to blacklist the users who attempt to post articles more than 3 times for 10 seconds? The blacklisted users cannot write articles or comments and send trackbacks.]]></value>
  <value xml:lang="jp"><![CDATA[10秒の間3回以上書き込みをすると、スパムとみなしますか書き込み、コメント作成とトラックバックの送信をブロックします。]]></value>
</item>

View file

@ -21,6 +21,8 @@ class spamfilter extends ModuleObject
// 2008-12-17 Add a spamfilter for post modification actions
$oModuleController->insertTrigger('comment.updateComment', 'spamfilter', 'controller', 'triggerInsertComment', 'before');
$oModuleController->insertTrigger('document.updateDocument', 'spamfilter', 'controller', 'triggerInsertDocument', 'before');
// 2013-11-14 The trigger which try to perform spam filtering when new message are registered
$oModuleController->insertTrigger('communication.sendMessage', 'spamfilter', 'controller', 'triggerSendMessage', 'before');
return new Object();
}
@ -39,6 +41,8 @@ class spamfilter extends ModuleObject
// 2008-12-17 Add a spamfilter for post modification actions
if(!$oModuleModel->getTrigger('comment.updateComment', 'spamfilter', 'controller', 'triggerInsertComment', 'before')) return true;
if(!$oModuleModel->getTrigger('document.updateDocument', 'spamfilter', 'controller', 'triggerInsertDocument', 'before')) return true;
// 2013-11-14 The trigger which try to perform spam filtering when new message are registered
if(!$oModuleModel->getTrigger('communication.sendMessage', 'spamfilter', 'controller', 'triggerSendMessage', 'before')) return true;
/**
* Add the hit count field (hit)
@ -76,6 +80,11 @@ class spamfilter extends ModuleObject
{
$oModuleController->insertTrigger('document.updateDocument', 'spamfilter', 'controller', 'triggerInsertDocument', 'before');
}
// 2013-11-14 The trigger which try to perform spam filtering when new message are registered
if(!$oModuleModel->getTrigger('communication.sendMessage', 'spamfilter', 'controller', 'triggerSendMessage', 'before'))
{
$oModuleController->insertTrigger('communication.sendMessage', 'spamfilter', 'controller', 'triggerSendMessage', 'before');
}
/**
* Add the hit count field (hit)

View file

@ -170,6 +170,38 @@ class spamfilterController extends spamfilter
return $output;
}
/**
* @brief The routine process to check the time it takes to store a message, when writing it, and to ban IP/word
*/
function triggerSendMessage(&$obj)
{
if($_SESSION['avoid_log']) return new Object();
// Check the login status, login information, and permission
$is_logged = Context::get('is_logged');
$logged_info = Context::get('logged_info');
// In case logged in, check if it is an administrator
if($is_logged)
{
if($logged_info->is_admin == 'Y') return new Object();
}
$oFilterModel = getModel('spamfilter');
// Check if the IP is prohibited
$output = $oFilterModel->isDeniedIP();
if(!$output->toBool()) return $output;
// Check if there is a ban on the word
$text = $obj->title.$obj->content;
$output = $oFilterModel->isDeniedWord($text);
if(!$output->toBool()) return $output;
// Check the specified time
$output = $oFilterModel->checkLimited();
if(!$output->toBool()) return $output;
// Save a log
$this->insertLog();
return new Object();
}
/**
* @brief Log registration
* Register the newly accessed IP address in the log. In case the log interval is withing a certain time,

View file

@ -97,7 +97,7 @@ class spamfilterModel extends spamfilter
/**
* @brief Check the specified time
*/
function checkLimited()
function checkLimited($isMessage = FALSE)
{
$config = $this->getConfig();
@ -118,7 +118,14 @@ class spamfilterModel extends spamfilter
// If the number of limited posts is not reached, keep creating.
if($count)
{
$message = sprintf(Context::getLang('msg_alert_limited_by_config'), $interval);
if($isMessage)
{
$message = sprintf(Context::getLang('msg_alert_limited_by_config'), $interval);
}
else
{
$message = sprintf(Context::getLang('msg_alert_limited_message_by_config'), $interval);
}
$oSpamFilterController = &getController('spamfilter');
$oSpamFilterController->insertLog();