2005年02月24日

●コメントスパム対策(その6)

再び Ogawa::Memoranda さん提供のスパム対策プラグインに対し、下記の改変を行いました。

    プラグイン:Quasi-Spam Filter Plugin
    改変内容:コメントの投稿者(MTCommentAuthor)の文字列をフィルタ対象に加える
これまでのコメントスパムは本文にフィルタ文字列が含まれていましたが、数日前、本文ではなく投稿者にフィルタ文字列が含まれるスパムが10通ほど到来しました。プラグインは(コメントについては)本文のみのチェックとなっていますので、投稿者に設定された文字列もチェックするように改変してみました。


修正については、ソースを下記の赤字部分から青字のものに置き換えてください(2番目の赤字部分はさらに1行追加がありますのでご注意ください)。なお今回の改変コードはOgawaさんの案を頂きました。ありがとうございました。

sub comment_filter {
    my ($eh, $app, $comment) = @_;
    return !is_comment_spam($comment->text);
    return !is_comment_spam($comment->text . ' ' . $comment->author);
}

sub comment_throttle_filter {
    my ($eh, $app, $entry) = @_;
    my $comment = $app->{query}->param('text');
    my $author = $app->{query}->param('author');
    return !is_comment_spam($comment);
    return !is_comment_spam($comment . ' ' . $author);
}

sub comment_error {
    my $app = shift;
    my $q = $app->{query};
    my $mode = $q->param('__mode') || $app->{default_mode};
    return if $mode ne 'post';
    if (is_comment_spam($q->param('text'))) {
    if (is_comment_spam($q->param('text') . ' ' . $q->param('author'))) {
        $app->add_methods(post => sub { });
        $app->error("Spam Comment!");
    }
}

sub comment_long_error {
    my $app = shift;
    my $q = $app->{query};
    my $mode = $q->param('__mode') || $app->{default_mode};
    return if $mode ne 'post';
    if (is_comment_spam($q->param('text'))) {
    if (is_comment_spam($q->param('text') . ' ' . $q->param('author'))) {
        $app->add_methods(post => sub { $_[0]->handle_error("Spam Comments!") });
    }
}

sub comment_redirect {
    my $app = shift;
    my $q = $app->{query};
    my $mode = $q->param('__mode') || $app->{default_mode};
    return if $mode ne 'post';
    if (is_comment_spam($q->param('text'))) {
    if (is_comment_spam($q->param('text') . ' ' . $q->param('author'))) {
        $app->add_methods(post => sub { });
        $app->redirect($URL);
    }
}

sub comment_evil_redirect {
    my $app = shift;
    my $q = $app->{query};
    my $mode = $q->param('__mode') || $app->{default_mode};
    return if $mode ne 'post';
    if (is_comment_spam($q->param('text'))) {
    if (is_comment_spam($q->param('text') . ' ' . $q->param('author'))) {
        $app->add_methods(post => sub { });
        $app->redirect($q->param('url') || $URL);
    }
}


コメント画面からの投稿については動作の正常性をを確認しておりますが、適用に際しましては個人の責任で行ってくださいますよう、よろしくお願い致します。

21:00 | Comments [7] | Trackbacks [8]

2005年01月31日

●コメントスパム対策(その5)

約5ヶ月ぶりの対策です。
これまでの経緯は、コメントスパム対策(その3)で特定の文字列をエラーとする対処を行った後、コメントスパム対策(その4)を実施したのですが、通常のコメントでエラーが発生するようになってしまい、一旦全て元に戻しておりました。その後、大量のコメントスパムを頂く度に削除するという原始的な手法に陥ってましたがさすがにみっともないので今回、下記のプラグインを使わせて頂きました。

個人的にコメントスパム対策は特定の文字列のみをエラーとするのが望ましいと思ってましたので、まさにうってつけのプラグインです。ありがとうございました。
使い方は簡単です。以下、引用です。
quasi-spamfilter.zipをダウンロードし、展開してください。次に中に含まれるquasi-spamfilter.plをMovable Typeのpluginsディレクトリーにアップロードしてください。以上です。

また、デフォルト状態では
# Set your spam pattern
our $PATTERN = '<h1>|<a\s'; # H1 or A elements

と h1 タグおよび a タグを対象とする設定となってますので、私は下記のように変更しています。
# Set your spam pattern
our $PATTERN = 'hoge1|hoge2|hoge3';

hogen が対象文字列です。文字列を"|"で区切ることで何文字でも設定できます。


このように特定かつ複数文字列を含んだコメントをフィルタリングすることができる他、その後のリアクションを変更することもできます。エラーにすることもできますし、特定のURLにリダイレクトさせることもできます。私はデフォルト状態で利用させていただいてますので、フィルタリングされたコメントはあたかも正常に受け付けられたかのように振る舞います。


ということで、もしコメント投稿後の個別エントリーアーカイブにコメントが反映されていなければフィルタリングされたと解釈ください(普段使われることのない文字列しかフィルタの対象にしてませんので大丈夫とは思いますが)。

01:15 | Comments [4] | Trackbacks [9]

2004年09月02日

●コメントスパム対策(その4)

我楽さんのコメント投稿で500エラーが出るけど、投稿反映される件について。でアドバイス頂いた通り、mt-comments.cgiのファイル名変更してみました。これで様子をみてみたいと思います。ありがとうございました。

00:05 | Comments [1] | Trackbacks [0]

2004年09月01日

●コメントスパム対策(その3)

再びオンラインカジノからコメントスパム頂きましたので次の対策を打ってます。ちなみに前回より私が行っている対策はコメントに特定の文字列が入力された時だけエラーにするというものです。多分「kasino」とか変な日本語混ぜてまた来るんでしょうね…。

00:45 | Comments [0] | Trackbacks [1]

2004年08月27日

●コメントスパム対策(その2)

半角英数のみのコメントをエラーとする対処にしていましたが、本文に「オンラインカジノ」と書かれたコメントスパムを3件頂きました(削除済)。
という訳で現在新たな対処を盛り込んでいます。不具合等ございましたらお許しください。

01:00 | Comments [0] | Trackbacks [0]

2004年08月19日

●コメントスパム対策

ようやく取りかかりました。

  ・コメントスパムを削除する手間が面倒
  ・コメンターの方への入力文字制限をしない

というポリシーで、当初我楽さんのコメントスパム、補足というか・・・。経由で女子十二月号さんのMovableTypeコメントスパム対策をと思いましたが、コメントプレビューテンプレートでユーザ定義のhiddenタグが引き継げない(スキル不足?)ことが発覚し、今のところMagic WhiteさんのTypeKey対応などなどスパム対策経由できままにポロポロさんの続々コメントスパムを参考にさせて頂いて、半角英数のみのコメントをエラーとする対処にしています。

01:31 | Comments [12] | Trackbacks [1]