コメントスパム対策

投稿者:

2-3日おきくらいにドワッと押し寄せるコメントスパム対策に格好のPluginを導入。Movable TypeではTypeKeyによって避けることもできるのだが、MTユーザ以外にはまだまだTypeKeyの認知は薄く、いちいち登録してもらうのも忍びないので、TypeKeyなしでもできるようにしていたのだが、やはりコメントスパムをいちいち手動で削除するのはウザイ。
というわけで、何かないかと探していたら見つかったのがコレ。トラックバックスパム対策も兼ねていて大変便利。
  Ogawa::Memorandaさん: Quasi-Spam Filter Plugin
コメントスパム/トラックバックスパムに含まれる特定の文字列をチェックしてはじいてくれるもので、デフォルトでは

# Set your spam pattern
our $PATTERN = ‘<h1>|<a\s’; # H1 or A elements
our $TBPING_PATTERN = <h1>|<a\s’; # H1 or A elements

と、h1 タグおよび a タグが対象になっている。他にも文字列を付け加えたい場合は、”|”で区切って、

# Set your spam pattern
our $PATTERN = ‘<h1>|<a\s|hoge1|hoge2|hoge3’; # H1 or A elements
our $TBPING_PATTERN = ‘<h1>|<a\s|hoge1|hoge2|hoge3’; # H1 or A elements

としてあげればよい。(ウチの場合は、どちらもh1タグとaタグは外しています。)
ちなみにOgawaさんのオリジナルの仕様では、

  • コメントスパムの対象文字列は、コメント本文に含まれるもの
  • トラックパックスパムの対象文字列は、概要(excerpt)に含まれるもの

となっているが、コメントスパムについてはコメント投稿者名、トラックパックスパムについてはタイトルに含まれる文字列も対象にしたい場合の改変方法を、小粋空間さんが公開している。

それから、以下は、サーバのPerlのバージョンが5.6よりも旧いものを使っている場合のトラブルシューティング。


というのは、Ogawaさんのスクリプトでは、変数の宣言に”our“を使っているのだが、これは5.6以降でないと使えないらしいのだ。ウチの場合、5.00503だったため、コンパイルエラーになって、MTのログにはこんなエラーメッセージが並んでしまった。

Plugin error: /hogehoge/mt/plugins/quasi-spamfilter.pl Compilation failed in require at /hogehoge/mt/lib/MT.pm line 293.

で、解決法は次の二通り。
解決法1
変数宣言のところのourmyに置き換える(だけ)。
解決法2
変数宣言のところのourを消去して、変数宣言の手前(”# Set your spam pattern”の上)、use strictの次の行にuse vars qw($COMMENT_PATTERN $TBPING_PATTERN $COMMENT_METHOD $TBPING_METHOD $URL);を書き加える。つまり、

use strict;
use vars qw($COMMENT_PATTERN $TBPING_PATTERN $COMMENT_METHOD $TBPING_METHOD $URL);
# Set your spam pattern
$COMMENT_PATTERN = ・・・以下略

としてあげればいい。
Perlのことは丸きりド素人なので、最初は、とりあえず同じ症例の人はいないかと検索したのだが、役立つものは見つからなかった。(結果的に言えば、今時はみんなPerlのバージョンが5.6以上ということなのだろう。)Ogawaさんのサイトでも尋ねてみたものの、お手を煩わせただけでなかなか原因が突き止められなかった。(Ogawaさん、申し訳ありませんでした。)それで、最後にOgawaさんから「Webサーバーにログインして、コマンドラインでperl quasi-spamfilter.plを直接実行したときにどのように表示されるか」を見てくださいというアドバイスに従った結果、

Global symbol “$COMMENT_PATTERN” requires explicit package name at quasi-spamfil
ter.pl line 13.・・・

というエラーメッセージが出てきて、これをもとに検索した結果、ようやく原因が判明。めでたく導入完了となった。(Ogawaさん、アドバイスありがとうございました。)
ちなみに導入完了の一歩で前でもう一つ、

Storable object version 2.09 does not match $Storable::VERSION 2.08 at /usr/libdata/perl/5.00503/DynaLoader.pm line 188.

というエラーにも遭遇したのだが、これは、以前に何かの関係でextlibディレクトリーに入れておいたStorable.pmのバージョンが2.08だったのが原因と判明。そこでサーバのusrディレクトリーまで行って見つけた2.09と置き換えて、解決できた。
なにはともあれ、これでうざいスパムを大幅にはじけるはず。

 

1つ星 (まだ評価がありません)
読み込み中...

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください