印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType エラーにしないコメントスパム対策

これまで、コメントスパムを受けた時点で、スパムを削除し禁止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;」の直後に追加するというのは同じ)。

use CGI qw(:standard);
if ($ENV{'REQUEST_METHOD'} eq "POST") {
    if (param('robot') ne 'deny' ||
        param('human') ne 'allow') {
        print "Content-Type: text/html\n\n";
        print "An error occurred.";
        exit;
    }
}

ここで、「robot」と「deny」や「human」と「allow」などの組を「||」でつないで増やしてもよい。多すぎても意味はなさそうだが、1つでは結構弱いという話もある。

さて、この修正を行った時点で動作確認をしておくのがよい。「コメント投稿用ポップアップ」または「個別アーカイブのコメント投稿欄」から投稿する。あるいは、

http://nlogn.ath.cx/opentype/mt-comments.cgi?entry_id=244

などとして直接アクセスしてもよい。「投稿 (Post)」ボタンを押すと、上記で設定した「An error occurred.」というメッセージが表示されれば成功である。

次に、個別アーカイブのテンプレート「Individual Archive Template」を編集し、</form> の前に次のコードを追加する。

<input type="hidden" name="robot" value="deny" />
<input type="hidden" name="human" value="allow" />

「robot」と「deny」や「human」と「allow」は CGI で設定した組み合わせと同じにする。保存して、コメントが投稿できることを確認する。このコードを追加するテンプレートは以下の通り。このサイトでは、コメント投稿用ポップアップ「Comment Listing Template」は使わないことにした。

  • Individual Entry Archive
  • Comment Preview Template
  • Comment Error 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): 日本語限定コメントスパム対策 をすることにした。

Posted by n at 2004-08-03 23:49 | Edit | Comments (0) | Trackback(1)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
コメントスパム対策[MT3]
このパッチの主眼点は、 ・キーをエントリ毎に替える事で安易なクラックを抑止できる というものです。 nlog(n)さんのblogでコメントできなかったのでTBにしてみました。 Trackbacked from: noblog::短気な猫3rd at August 06, 2004 21:49
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?