ブラックリストで MT コメントSPAM対策

| | コメント(0)

「mt-comment.cgiをリネームしても、ほとんど効果がないので、別の方法を。
前、「ベイジアンフィルタを導入」をやりたいと言ってたけど、別の方法になっちゃった。。。

SEE:
mt-comment.cgiのリネーム (このblogより)
MTコメントスパム対策 (このblogより)

・MT コメントSPAM対策: blog.bulknews.net
http://blog.bulknews.net/mt/archives/000903.html
この辺を参考にいじってみました。
全然変わっちゃったけど。(←日本語間違ってるし)

ブラックリストを作り、禁止語句にマッチするコメントをはじくものです。

やってみる

「名前」「メールアドレス」「URL」「Comment」に対するBlacklist(禁止語句)をファイルに保存しておいて、それにマッチしたコメントだったら、はじくものです。

Blasklistのファイルはそれぞれ、「blacklist_author.txt」「blacklist_email.txt」「blacklist_url.txt」「blacklist_text.txt」です。
禁止語句は改行区切りで書き込んでおきます(1行に1つの禁止語句)。
日本語を使いたいときは、EUC-JPで動作させているなら、EUC-JPで書き込んでおけば良さ気。
Blasklistのファイルが存在しない場合は処理をスキップします(エラーになりません)。

MT 2.661の「\MT\lib\MT\App\Comments.pm」の84行目付近に以下を追加しました。
「MT::IPBanList」をいじる前あたりです。

「$blacklist_str」の値は適切なパスに変更する事。
汚いコードだ・・・。

my @fields = ("text","author","email","url");
foreach my $field ( @fields ) {
  my $posted_str = $q->param("$field");
  my $blacklist_str = "/path/to/blacklist_${field}.txt"; # 環境に合わせてパスを変更
  if ( -e "$blacklist_str" ) {
    open ( FH , " $blacklist_str " )
      or return $app->error("$blacklist_str: $!");
    my @banned_strs = <FH> ;
    close ( FH ) ;
    foreach my $banned_str ( @banned_strs ) {
      chomp $banned_str;
      if ($banned_str ne '' && $posted_str =~ /$banned_str/i) {
        $app->log("Banned comment. banned string : $field = ".substr($banned_str,0,30).".");
        return $app->handle_error('Banned your comment.Sorry...');
      }
    }
  } else {
    # for debug
    #$app->log("Not Found. Blacklist File : $blacklist_str");
  }
}

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、ikeが2005年3月27日 01:55に書いたブログ記事です。

ひとつ前のブログ記事は「TVexe.com」です。

次のブログ記事は「recently_pinged_on Plugin」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近のコメント

Powered by Movable Type 4.261