« Googleデスクトップサーチのplugin MTCommentFields関係の変更 »
コメントスパム対策
July 12, 2005 15:35 [ Spam ]
スパムが来たら対策するか、と思っていたら、こんなにアクセスが少ないのに、もうスパムがいらっしゃったため、対策をすることにした。
対策としては
- 入力される文字や送信元のIPで制限
特定のキーワードではじいたり(有名所ではpluginでMT-Blacklistがある)、日本語スパムはあまりないことから半角英数のみのコメントをすっぱり切ってしまったりなど。さらにしつこい場合には、連続するひらがなとか句読点など色々条件はつけていける。日本語関係はきままにポロポロ: コメントスパム ひらがな対策が詳しい。 - 送信に追加の操作を必要にする
チェックボックスにチェックを入れてもらうとか、表示されている文字を入力してもらうなど。より確実性はあるが、コメントする方はかなり面倒。(単に自分が面倒くさがりという話しもある) - フォームから入力された場合だけ受け付ける
コメント用のcgiをデフォルトの名前から変えたり、フォームに隠し属性を入れておくなど。ただ、htmlソースにその内容はしっかり書いてあるため、ソースも自動的に(もしくは手動で)チェックしてくるスパマーの場合には効果無し。
英語のコメントはまず来ない(そもそも英語の記事がない)だろうけど、何となく完全カットはしたくないし、キーワードやIPをせっせとリスト化するのも面倒な上、重くなる。とりあえずは簡単なものでいいだろうということで、隠し属性を追加しておくことにした。
<form> </form> の間に <input type="hidden" name="kanzume" value="kanzume" /> を追加して、これがないときにはエラーを出すという仕組みになる。
1.フォームに隠し属性を追加
コメント投稿の <form> </form> の間ならどこでもよいが、自分はわかりやすい場所として
<input type="hidden" name="entry_id" value="$entry_id" />
のすぐ後に
<input type="hidden" name="kanzume" value="kanzume" />
を置いた。なお、上の name と value の名前は好きな名前にして良い。
対象とするフォームのあるファイル
- 個別アーカイブテンプレート
- lib/MT/default-templates.pl
- lib/MT/Template/Context.pm
- php/lib/function.MTCommentFields.php
それぞれ2箇所直すところがある。
2.隠し属性が入っていない場合にはエラーにする
lib/MT/App/Comments.pm の245行付近に赤字部分を追加する。
if (!$q->param('text')) {
return $app->handle_error($app->translate("Comment text is required."));
}
if (!$q->param('kanzume')) {
return $app->handle_error("Please send comment via comment form.");
}
my ($comment, $commenter) = _make_comment($app, $entry);
この "Please send comment via comment form." というのは表示させたい好きなコメントにして問題なし。(ただしココに日本語を入れるのは文字化けするためNG)
3.サイトの再構築をして終了
もう少し丁寧な解説はこのへんにある。
[Spam]前後の記事
- SpamLookupのKeyword Filterの修正 (4/15 21:26)
- Movable Type(3.2-ja-2) アップグレード覚え書きその2 (4/14 21:10)
- コメントスパム対策 (7/12 15:35)