コメントスパム対策3.1 その2(Spam Protect H1)

一向に減らない自動投稿っぽいコメントスパムへの対策としてあるアイデアを実施中です。
現在様子を見ていますが、スパムのブロックには成功しているようです。

あまりに単純な方法なので、こんなん発表していいのか悩みますが、その前に通常の使用に問題を生じていないかが大事ですよね。

そんなわけでコメントのテストをして頂けると幸いです。
もう数日したらこのエントリで方法を紹介しようかな、と思っています。

だいたいいいようなんで公開。

名付けて「Spam Protect H1」。

やはり

/mt/lib/MT/App/Comments.pm

を加工します。

284行目付近

return $app->handle_error($app->errstr()) unless $comment;

の前に挿入します。

if ($comment->url) {
require MT::Util;
if (my $fixed = MT::Util::is_valid_url($comment->url, 'stringent')) {
$comment->url($fixed);
} else {
return $app->handle_error($app->translate(
"Invalid URL '[_1]'", $comment->url));
}
}

# Spam Protect H1 added by Kirishima

if ($comment->text) {
if ($comment->text =~ /<h1>/i) {
return $app->handle_error($app->translate("Spam Protect H1 blocked your comment."));
}
if ($comment->text =~ /<a href=/i) {
return $app->handle_error($app->translate("Spam Protect H1 blocked your comment."));
}
}

return $app->handle_error($app->errstr()) unless $comment;

## Here comes the fancy logic for deciding whether or not the
## comment appears.

こんな感じです。

みりゃわかると思いますが、コメント中に<h1>タグと<a>タグを書いたら受け付けません。
ここだ、というコトが分かったので、あとは、気に入らない文字列をビシバシ弾けばいいわけで。
英語でひとこと、「good site.」とかっつーコメントスパムは止まりませんが、その程度は手で処理できる範囲と考えています。