MovableTypeを3.17にアップする際、セキュリティがあがったとしたら、余計なスパム対策は入れなくてもいいかと思って、この方法は導入しませんでした。
「投稿の前にここをチェックしてください」 という方法でコメントスパムロボットの攻撃をかわす
きりしま屋: コメントスパム対策3.1
コメントは、TypeKeyを使っていないものは、管理者が承認してから公開される設定ですが、承認を要求する通知メールが次から次へと届いてじゃまで仕方ありません。
そこで、この方法の復活となりました。
このコメントスパム対策は、
「投稿の前にここをチェックしてください」
という方法でコメントスパムロボットの攻撃をかわすわけです。
ロボットでスパムをばらまいている人がわざわざ自分のコメント欄のフォームを解析してから送信することは、現状の直接 mt-comments.cgi を直接叩いていると思われる手法では十分な効果があると思いますが、フォームをきちんと解析するコメントスパムツールを使われたら、このような単純なチェック欄ではなく、足し算をさせるとか、人間でないとできないことを入れないとならないですね。
ホントは標準で、画像の文字列をランダムに生成して、そこに見える文字を入力してもらう、あのセキュリティがあってもいいのでは、と思います。ライブラリの関係で、できないホスティングサービスもあることでしょうが、MovableTypeの為だけに、Image::Magicをインストールしてあるホスティングサービスって割と多いと思うんですよね。
ま、その不満はさておき、まずは、
Individual Entry Archive
と
いうテンプレートにコメント入力欄を作っているので、そこに
<input type="checkbox" id="spamprotect" name="spamprotect" /><label for="spamprotect">投稿前にここをチェックしてください</label>
というのを投稿の「確認」のボタンの記述の直前に挿入します。
このタグ内で設定する name のパラメータを設置しているMovableTypeごとに個別の物にすることだけでも、このような簡単なスクリプトで、コメントスパムの自動化が防げるのではないか、と思うのですが…。
他にもコメント入力欄を用意している場合は、そこにも記述が必要です。
(私は他のコメント欄は潰してしまいました。面倒なので)
んで、
/MT/lib/MT/App/Comments.pm
に、このチェックボックスがチェックされているかを判定するコードを挿入します。
3.17の場合、前のバージョンから更新はされているようですが、位置は同じで、245行の後に入れるとよさそうです。
243 if (!$q->param('text')) {
244 return $app->handle_error($app->translate("Comment text is required."));
245 }
# Spam protection added by Kirishima original:chrome
if (!$q->param('spamprotect')) {
return $app->handle_error($app->translate("Please check the 'Spam Protection' checkbox."));
}
246 my ($comment, $commenter) = _make_comment($app, $entry);
247 if (!$blog->allow_unreg_comments) {
TypeKeyで認証されている人はチェックしなくてもいいようにしたいところですが、どうやって判定するべきか追跡するのも面倒なので、相変わらず放置です。
(手抜き)
コメントスパム対策3.2-ja-2はこちらです。
トラックバック
この一覧は、次のエントリーを参照しています: コメントスパム対策3.17:
» Movable Type:コメントスパムの解決策 送信元 Party?Party!@neppie.com
おはようございます。Movable Typeでブログを書いているのですが、コメン... [詳しくはこちら]