これまで、コメントスパムを受けた時点で、スパムを削除し禁止IPに1つずつ登録を行っていた。しかし、こんな方法では間に合わないくらいの大量コメントスパムが来てしまった。コメント投稿 CGI のリネームによる nlog(n): コメントスパム対策 は効き目が薄かった。MT-Blacklist を導入するのは面倒そう。それよりも簡単な方法があったので対策する。ただし、エラー終了しないように修正して導入する。
女子十二月号: MovableTypeコメントスパム対策 で紹介されている、Burningbird » Comment Spam Quick Fix の方法である。スパム用のロボットは、ダイレクトにコメント投稿用 CGI にアクセスしてくるという特徴がある。そこで、自分のサイトの投稿フォームに独自の属性を持たせておいて、その属性があるときだけコメントの投稿を許可するというものである。
上記では、コメント投稿用 CGI「mt-comments.cgi」を編集し、「use strict;」の直後に以下のコードを追加するとしている。
use CGI qw(:standard);
if ($ENV{'REQUEST_METHOD'} eq "POST") {
my $data = param('snoop');
die unless ($data);
}
しかしこの方法では、直接「mt-comment.cgi」にアクセスして投稿した場合に「500 Internal Server Error」となり、エラーログにも書き込まれる。あまり嬉しくないので、追加するコードは次のようにした (最初の「use strict;」の直後に追加するというのは同じ)。
ここで、「robot」と「deny」や「human」と「allow」などの組を「||」でつないで増やしてもよい。多すぎても意味はなさそうだが、1つでは結構弱いという話もある。
さて、この修正を行った時点で動作確認をしておくのがよい。「コメント投稿用ポップアップ」または「個別アーカイブのコメント投稿欄」から投稿する。あるいは、
などとして直接アクセスしてもよい。「投稿 (Post)」ボタンを押すと、上記で設定した「An error occurred.」というメッセージが表示されれば成功である。
次に、個別アーカイブのテンプレート「Individual Archive Template」を編集し、</form> の前に次のコードを追加する。
「robot」と「deny」や「human」と「allow」は CGI で設定した組み合わせと同じにする。保存して、コメントが投稿できることを確認する。このコードを追加するテンプレートは以下の通り。このサイトでは、コメント投稿用ポップアップ「Comment Listing Template」は使わないことにした。
大量のコメントスパムは、7月31日の午前3:22から来初め、気がついて止めた4:46までに97通来た。気がつかなければ、そのまま続いていたと思われる。複数のIPアドレスを禁止にすることで、ようやく止めることができた。
コメント削除には、Memo Leaves: 編集メニュー画面からコメントスパムを一括削除 が便利である。公開してくれている menu.tmpl を入れ替えるだけである。5個ずつ地道に削除していって、最後に再構築をするとよい。
2004年8月6日追記:
noblog::短気な猫3rd: コメントスパム対策 では、Comment.pm を修正する方法が紹介されている。上記の方法と似ているが、
が上手い。タイトルに日本語を使っておけば、英語圏からの攻撃はかなりの確率で撃退できそうである。 MT3 用の紹介もある (noblog::短気な猫3rd: コメントスパム対策[MT3])。
2004年9月13日追記:
上記の方法は、どちらもすぐに突破されてしまった。 nlog(n): 日本語限定コメントスパム対策 をすることにした。
Master Archive Index
Total Entry Count: 1957