ホーム > Diary | Movable Type > MT4.12:スパムコメント対策を施してみた

MT4.12:スパムコメント対策を施してみた

先週中ごろから、どうもこのブログ*Marquee Moonの動作がおかしい。

全体的の重い。更新もままならない。
サーバー(さくらレンタルサーバー)に何かあったのかと思いはしたものの
どうも様子がおかしい。

翌日、仕事から帰ってくると、特定のエントリーに同じユーザーからのコメントが
大量に来ている。
しかも、内容が意味不明だったり、URLだけだったりと。。。。

この時、初めてコレが所謂「スパムコメント」であると知るわけです。

で、手をこまねいてるわけにもいかないので、コメントの受け付けと
ブログの更新を止めて、2日がかりでなんとか、スパムコメント対策を
施してみました。

ちなみに、対策にあたり、Wing Memo
「MT4を運営開始する前に設定しておくと良い9つの項目」という記事を
参考にさせていただきました。

スパマーは、ブログにアクセスせずに直接CGIを動かすようです。

対策としては、人間の手で投稿するアクションを起こさせるか、
外部からCGIが見えないようにするか、いずれかのようです。

前者の場合、MT-Keystrokesというプラグインを導入するか、
CAPTCHAプロバイダプロバイダを利用して画像認証を導入する方法がありますが、
MT-KeystrokesはMT4以降は正式には対応してなく、
CAPTCHAの場合、環境によっては認証がうまくいかないなどのトラブルがあるようです。

結局、私の場合は、CGIを外部から見せない方法を選択しました。
この方法の方が、CGIに対するアクセスを遮断できるので、
サーバーに対する負荷も減らす事ができ、CGIが止まってしまう事態も回避できます。

MT-KeystrokesをMT4以降に対応させる方法もあり、実際に試してみたのですが、
私の場合うまくいかなかった。
どうも個別のエントリーにアクセスできずに、CGIがとまってしまったようです。
やはり、スパムに対しては断固拒否姿勢が一番です。

で、実際にCGIを見せなくする方法は以下の通りです。

1:サーバー上でmt-comments.cgiをリネーム

とにかく推測されにくい名前にします。
私の場合、ID Manager というフリーウェアのパスワード生成機能を
利用して作成したcgi名にしました。
ここでは、仮に xyz-comments.cgi とします。

2:リネームしたcgi名をmt-config.cgiに追記する

CommentScript xyz-comments.cgi

と、mt-config.cgiの一番最後にでも追加しておけばOKです。
リネームしたcgi名をmt-config.cgiに追記し、システムに
コメントCGIが変わったことを知らせます。

で、cgiのリネーム自体はこれで問題ないのですが、これでは
せっかくリネームしたcgi名が、まだソースから見えてしまいます。
当然スパマーにもみえてしまうので、今度はcgi名をソースから
完全に除去するために、javascript利用します。

3:以下をJavaScript(mt.js)に追記

インデックステンプレートのJavaScrip=mt.jsに以下を追記します。
一番最後でOKです。

function mtCm() {
document.comments_form.action = “<$MTCGIPath$><$MTCommentScript$>”;
}

4:「コメント入力フォーム」を修正

(1)テンプレートモジュールの「コメント入力フォーム」の
<form method= から始める部分をの<$MTCGIPath$><$MTCommentScript$>
削除します。

【修正前】
<form method=”post” action=”<$MTCGIPath$><$MTCommentScript$>” name=”comments_form” id=”comments-form” onsubmit=”if (this.bakecookie.checked) rememberMe(this)”>
    ↓           ↓        ↓

【修正後】
<form method=”post” action=”" name=”comments_form” id=”comments-form” onsubmit=”if (this.bakecookie.checked) rememberMe(this)”> 

(2)同じくテンプレートモジュールの「コメント入力フォーム」の
</form> と </div>の間に<script type=”text/javascript”>mtCm();</script>
と追記します。

</form>
<script type=”text/javascript”>mtCm();</script>
</div>

こうする事で、action=”"の「 ”" 」間の部分にjavascriptが
読み込まれるわけですね。

5:「コメント詳細」を修正

続けて、テンプレートモジュールの「コメント詳細」を以下の様に修正します。

<$MTCommentAuthorLink default_name=”Anonymous” show_email=”0″ no_redirect=”1″$>

こうする事で、コメント入力者がURLを入力した際、コメントCGIからリダイレクトされなくなり
リダイレクトURLからコメントCGIがばれるのを防ぎます。

と、いった具合ですが、実際やってみて最初の内はjavascriptがうまく動かずに
405エラーが何度かでましたが、時間が経過すると普通に動く様になりました(?)

対策を施してから4日ほど経ちましたが、今の所スパム被害も動作も問題ありません。
何より、サーバーに負荷をかけないのがメリットです。

定期的にコメントCGIのリネームを繰り返していけば、確実かつ恒久的な
スパム対策となるでしょう。

次はトラックバックスパム対策ですが、まだ被害にあってないので
機会を伺いつつといったところでしょうか?

とは言え「転ばぬ先の杖」ともことわざもあるし。。。

コメント:0

コメントを投稿するにはログインしてください。

トラックバック:0

この記事のトラックバック URL
http://marqueemoon.info/archives/2008/08/18-220637.php/trackback
トラックバックの送信元リスト
MT4.12:スパムコメント対策を施してみた - *Marquee Moon より

ホーム > Diary | Movable Type > MT4.12:スパムコメント対策を施してみた

最近の投稿
Tag cloud
最近のコメント
アーカイブ

ページの上部に戻る