記事本文
正当なコメントもフィルタリングしていた
トラックバックスパムの対策を講じてみたで Quasi-Spam Filter Plugin を導入しましたが、スパムではないコメントもフィルタリングしてしまっていたようです。
- 659 : e-luck : 2005/03/08 10:35
先日、このエントリーに幾つかSBMのサービスをコメントしたんですが、見事に反映されなかったっす(笑)
データベースを覗いても、それらしきものが残されていなかったため、おそらくフィルタリングの対象になってしまったのでしょう。 e-luck さん ( Lucky bag::blog ) 、申し訳ありませんでした。
何故フィルタリングしてしまったのか ?
これは私が Quasi-Spam Filter Plugin を導入した際に、自分で動作テストを行わなかったことに原因があります。 Quasi-Spam Filter Plugin の機能自体に問題があるわけではありません。
# Set your spam pattern our $COMMENT_PATTERN = '<h1>|<a\s'; # H1 or A elements
Quasi-Spam Filter Plugin をノンカスタマイズで使用した場合、コメント中に
<h1>
または
<a
という文字列が含まれていると、フィルタリングを行います。
そして、フィルタの動作は
コメントが成功した場合と区別が付かないが、裏では削除されている
というものになります。
そして、この条件ではスパムではないコメントもフィルタリングに引っかかる可能性が高いのです。 例えば、 e-luck さんが 「カラー液晶の iPod mini は年内に出荷されるみたいですよ」 という、文中にリンクを交えたコメントを投稿しようとした場合、コメント欄に書き込む文字列は <a href="http://www.lucky-bag.com/archives/2005/02/ipod_mini.html">カラー液晶の iPod mini は年内に出荷されるみたい</a>ですよといったものになると思います。
すると、
<a
というフィルタルールによってフィルタリングが行われてしまうわけです。
おそらく、 e-luck さんの当該コメントも、私にソーシャルブックマークサービスを教えて下さろうとしたためにフィルタリングに引っかかってしまったのでしょう。
対策その 1 - Quasi-Spam Filter Plugin をカスタマイズする
正当なコメントに対する意図しないフィルタリングを防ぐ為には、プラグインの記述をカスタマイズするという手段が考えられます。 これは更に 2 つの方法に分かれます。
<aというフィルタルールを除外する-
これは一例ですが、
our $COMMENT_PATTERN = '<h1>|<a\s'; # H1 or A elementsという記述を、our $COMMENT_PATTERN = '<h1>'; # H1 elementsとすると、 a 要素によるフィルタリングは行わなくなります。しかし、多くのコメントスパムが自サイトへのリンクを書き込もうとするために、この対策はスパムフィルタリングとしては現実的ではありません。 ただし、正当なコメントの投稿者が
<a href="http://example.com/">hoge</a>形式の内容を含めることが予想される場合には a 要素のフィルタリングは外した方が良いでしょう。 - フィルタリアクションを CommentFilter 以外のものにする
-
フィルタリアクションのデフォルトは CommentFilter であり、これは
コメントが成功した場合と区別が付かないが、裏では削除されている
といったものですので、スクリプト等によるコメントスパムには効果的でも、正当なコメントをしてくれる方には「何で反映されないの ? 」という疑問が残ることになります。そこで、 CommentError などのリアクションにしておくと、スクリプトによる投稿以外にはとりあえず「投稿できなかった」ということを通知できます。 ( ただし、正当なコメントでも投稿が行えないことに変わりはありませんが。 )
対策その 2 - Quasi-Spam Filter Plugin をノンカスタマイズのままで対処する
プラグインのカスタマイズはよく分からない、変にいじって動作しなくなったらどうしよう、という場合はプラグイン以外の場所を工夫することになります。
やはり最も簡単なのは、コメント投稿欄の近くに 「 <a href="http://example.com/">hoge</a> 形式の記述はできません。 URI は自動でリンクアンカーを付与するのでそのままお書きください。」 といった感じの注意書きを書くことでしょうか。 ( 注意 : 自動でリンクアンカーを付与するかどうかは「ウェブログの設定」に依存します。 )
先ほど自分でテストして分かったのですが、ノンカスタマイズの状態では、 「投稿は正常に行われたように見えるが実際には反映されず、また投稿した内容を取り戻すことはできない」 という結果になります。
ノンカスタマイズでフィルタリングを行う場合、注意書き等を明記しておかないと、せっかくコメントをしてくれようとする方の気分を害してしまう可能性がある、ということを覚えておいてください。 ( 私も自戒を込めて覚えておきます。 )
私が取った対策
現時点では、 COMMENT_PATTERN から
<a
を除外することで対処としました。
元々コメント中に HTML タグの記述を許可していなかったため、 a 要素が含まれたコメントスパムも ( 消去する手間がありますが ) 実害はありませんでした。 そのため、スパムが投稿されたらその都度文面から特徴的な単語 ( poker とか ) をフィルタリングの対象にするという「後手」の対応を敢えて取ることにしています。 ( もちろん、今後の状況によってはまた変更するかもしれませんが。 )

