MovableTypeを2.661にしてから初のコメントスパムのお越しです。ソッコーMovableType自信にBanned IPとして登録されていましたが、いくつかはやられてしまったわけです。
手動で入力しているかどうかを見分けるには、認証コードを入力してもらうのが一番なのですが、以前見つけたのだと、ちょっとその辺難しいみたいです。
そこで、
「投稿の前にここをチェックしてください」
という方法でコメントスパムロボットの攻撃をかわすアイデアが紹介されていたので、自分の所にも猿まねしようかと。
で、
Comment Listing Template
と
Comment Preview Template
と
Individual Entry Archive
と
いうテンプレートにコメント入力欄を作っているので、
<input type="checkbox" id="spamprotect" name="spamprotect" /><label for="spamprotect">投稿前にここをチェックしてください</label>
というのを投稿のキャンセルの直前に挿入する。
Commment Error Template
は、正しく投稿されないときに、コメントエラーを出力するテンプレートで、
ここで修正しても投稿することができるようになっている。
あまりに親切なので、ここはバッサリ、このテンプレート内の投稿フォームはバッサリ削除する。
(<form>~</form>)んで、投稿し直してもらうように文章を変更。(不親切)
んで、
/MT/lib/MT/App/Comments.pm
に、このチェックボックスがチェックされているか判定するコードを挿入する。
2.661だと、だいぶソースが違うみたいで、IP Banのロジックが入っているので探しにくいが試しに、161行目に同じルーチンが登場するので、そこに挿入してみる。
if (!$q->param('text')) {
return $app->handle_error($app->translate("Comment text is required."));
}
# Spam protection added by chrome
if (!$q->param('spamprotect')) {
return $app->handle_error($app->translate("Please check the 'Spam Protection' checkbox."));
}
my $comment = MT::Comment->new;
$comment->ip($app->remote_ip);
こんな感じ。