2005.04.27
コメントスパムが来た・・・(Movabletype)
私のページなど、見にくる人も少なくComment Spamなど関係無いとタカを括っていたら、ついにやってきた。
私のBlogより、私のところのサーバで運営して活発な書き込みを行っておられる方がおられるが、聞いてみたらいっぱい来るのを一生懸命削除していたとのこと。
気が付かず、申し訳ないことをした。
ということで、対策をほどこした。 と、言っても既に色々な手法がネットで述べられているので、そのまま使わせていただいただけだ。 有名サイトではもっと手の込んだ方法も必要なのだろうが、当サーバでは代表的な方法で一応止まったようだ。
防備録として、以下に書いておくが、考え方は自動でcomment.cgiにアクセスして投稿をするだけでは無効でちゃんとコメントの入力欄に書き込むことが必要(当然のこと)とするものである。
1.個別エントリーに追加
個別エントリーを開いて以下の赤字部分を追加する。
なお、nameとvalueの”YAMETEYO”は各自好きな語句を入れればよい。
<input type="radio" id="remember" onclick="rememberMe(this.form)" name="bakecookie" /><label for="remember">はい</label> <input type="radio" id="forget" name="bakecookie" onclick="forgetMe(this.form)" value="Forget Info" style="margin-left: 15px;" /> <label for="forget">いいえ</label> <input type="hidden" name="YAMETEYO" value="YAMETEYO" > <br style="clear: both;" />
2.その他の編集対象ファイル
以下の4つのファイルが編集対象
lib/MT/default-templates.pl
php/lib/function.MTCommentFields.php
lib/MT/Template/Context.pm
lib/MT/App/Comments.pm
(1) lib/MT/default-templates.pl の2カ所 (1140行付近, 編集後の1214行付近)
以下のように赤字部分を挿入
<input type="radio" id="remember" name="bakecookie" onclick="rememberMe(this.form)" /> <label for="remember"><MT_TRANS phrase="Yes"></label> <input type="radio" id="forget" name="bakecookie" onclick="forgetMe(this.form)" value="Forget Info" style="margin-left: 15px;" /> <label for="forget"><MT_TRANS phrase="No"></label> <input type="hidden" name="YAMETEYO" value="YAMETEYO" > <br style="clear: both;" />
同様に
lib/MT/Template/Context.pm の2カ所 (1244行付近、編集後の1332行付近)
php/lib/function.MTCommentFields.php の2カ所 (96行付近、編集後の165行付近)
も修正。
3.lib/MT/App/Comments.pm の編集
lib/MT/App/Comments.pm の 243行付近(編集後)に赤字部分を追加。
最初の赤字の部分は日本語を含まないコメントを排除するために付け加えたもので、2つ目がcomment.cgiのみを使った投稿防止です。
if (!$q->param('text')) { return $app->handle_error($app->translate("Comment text is required.")); } if($q->param('text') !~ m/[x80-xff]/){ return $app->handle_error($app->translate("Can not accept your comment.")); } if (!$q->param('YAMETEYO')) { return $app->handle_error("Please send comment via comment form."); } my ($comment, $commenter) = _make_comment($app, $entry);
これでブログを再構築して完了。