2006年7月26日
Perlのバージョンアップ
以前のブログ ブログ「 MTプラグインが認識されない 」と 「 Storable.pm 」の続き。 パールのモジュールを追加できたので、 これで問題解決か、と思ったら甘かった。MovableType の プラグイン「mt-ban-norefertb.pl」に関して 確かに、「Storable.pm」というパールのモジュールが見つからない、 というような内容のエラー・メッセージは出なくなったのだが、 代わりに、
Plugin error: /usr/www/users/mt/plugins/mt-ban-norefertb.pl Compilation failed in require at /usr/www/users/mt/lib/MT.pm line 293.という別の エラー・メッセージが表示されるようになった。 それに、もう一つのプラグイン「mt-ban-ascii.pl」に関しての
Plugin error: /usr/www/users/mt/plugins/mt-ban-ascii.pl BEGIN not safe after errors--compilation aborted at /usr/www/users/mt/plugins/mt-ban-ascii.pl line 17.というエラー・メッセージも以前から残っている。
さて、これらのメッセージから、自サイトの Perlのバージョンが古いのではないかと思われたので調べてみた。
% perl -v This is perl, version 5.005_03 built for i386-freebsdちなみに上記2つのプラグインが問題なく動作している JTPA のサイトでも同じことを行ってみると、
%perl -v This is perl, v5.8.3 built for i386-freebsd今までPerlのバージョンが古くても、MovableType が問題なく動いてくれていたので、 そのままにしてきたのだが、この際、Perlの バージョンアップを行うことにした。
例のごとく私が使ってるサーバーのOS が FreeBSD なので
cd /usr/ports/lang/perl5.8/ make installこれを行うと、 /usr/local/bin/perl が新たに作られる。 ちなみに従来の バイナリは 「 /usr/bin/perl 」であり、これはこれで残ったままである。 そこで
cd /usr/bin mv ./perl ./perl.org ln -s /usr/local/bin/perl ./perlこれで、MovableType側の設定を全く変更することなく 新しいPerlを実行することができるようになった。 MTの管理画面で確認してみると、「利用可能なプラグインの設定」として 2つのプラグインがリストされるようになった。 これで少しはスパムが減るであろう。
カテゴリー: FreeBSD , MTスパム 22:41 | コメント (0) | トラックバック (0)
2006年7月20日
Storable.pm
前回のブログ「 MTプラグインが認識されない 」の続き。問題発生時には ログを調べるのが鉄則、とばかりに、MovableType の管理画面のログを覗いてみた。 今回、「mt-ban-ascii.pl」と「mt-ban-norefertb.pl」という 2つの プラグインを入れてみたのだが、どちらからも 「Plugin error:」のメッセージが吐き出されているようである。
その内、まず、解決が簡単そうな「mt-ban-norefertb.pl」に関する方をみてみよう。 メッセージが長いのでチョット省略したが、内容は以下のような感じ。
Plugin error: /usr/www/users/mt/plugins/mt-ban-norefertb.pl Can't locate Storable.pm in @INC (@INC contains: /usr/www/users/mt/extlib 以下ディレクトリのリスト) at /usr/www/users/mt/lib/MT/PluginData.pm line 9.このメッセージを解析してみると、どうも「Storable.pm」というパールのモジュールが見つからない、 というようなことを言っているようだ。 ということは、単純に、「Storable.pm」をインストールすれば解決するのだろうか。
それから、パールのモジュールのインストール方法を調査してみた。 調査の結果、結局 私が使ってるサーバーのOS が FreeBSD なので、 Ports としてインストールできるようだ。 よって、サーバーのシェルにログイン後、スーパーユーザーになって、
cd /usr/ports/devel/p5-Storable make installと打っただけでパールのモジュールの追加ができたようだ。 さて、これで MovableType のプラグインが動き出すかな?
【参考リンク】
カテゴリー: Movable Type , MTスパム 21:18 | コメント (0) | トラックバック (0)
2006年7月19日
MTプラグインが認識されない
このブログのカテゴリー「 MTスパム 」で Movable Type のスパム対策について、過去にまとめてきたものは、 私が管理をお手伝いしている JTPAのサイト に対して行ってきたものであった。 自分のブログ・サイトについては、それほどスパム攻撃を受けていなかったので ほったらかしにしていた。 ところが、ここ最近、コメント・スパムも トラックバック・スパムも共に凄い勢いで増えてきた。自分のサイトの Movable Type は、いづれバージョンを上げるので その時にスパム対策も行おうと思っていたので、今まで別段 対策を講じてこなかったのだが、 ここにきて、スパムのあまりの多さに、緊急処置を行う事にした。 そこで、JTPAのサイトで行ったのと同様の対策の中で、 比較的簡単な対策を自サイトにも施してみた。
それは、『 MovableType のスパム対策(12) 「MTBanASCII」 』と『 MovableType のスパム対策(13) 「BanNoReferTb」 』とで解説したように、 MTのプラグインをインストールすることである。 これなら、簡単な作業で ある程度の効果が期待できる。
ところが、JTPAのサイト では何の問題もなかったのに、 自分のサイトに上記2つのプラグインをインストールしてみると、これがうまくいかない。 プラグインが 認識されれば、MTの管理画面に「利用可能なプラグインの設定」として リストされるハズであり、現に JTPAのサイト では そうなっている。 ところが、自分のサイトの管理画面では そのリストが表示されないし、もちろん、プラグイン自身も動作している気配がない。 さて、これから原因を究明してゆかなかければならない。
カテゴリー: Movable Type , MTスパム 21:43 | コメント (0) | トラックバック (0)
2006年2月23日
MovableType のスパム対策(13) 「BanNoReferTb」
MovableType のトラックバック・スパムに対する対策として、 言及リンクのない TrackBack ping を弾くプラグインについて。今まで、MovableType の コメント・スパムの防止方法について書いてきた。 今度は、トラックバック・スパムに対する対策について考えてみる。
トラックバック・スパムについて考えるとき、 何をもってスパムと定義するか、 それをどうやってコンピュータに自動的に判断させるか、 という問題がある。 そこで考えられるのが、「言及リンク」の有無を判断基準にするということである。 言及リンクとは、送信元からトラックバック先へのリンクのことを指す。 これについては、以前に 『「はてなダイアリー」に対するトラックバック・エラー』で触れたとおり、「はてな」では以前から 言及リンクのない トラックバック・ピングを弾く仕様になっている。
これを MovableType で行うためのプラグインについて 「Movable Type で言及リンクのない TrackBack ping を弾くプラグイン」に解説してある。 ここで紹介されているプラグイン「BanNoReferTb」を採用させていただいたが、 例のごとくプラグイン用のディレクトリに放り込むだけでキチンと動作してくれた。
この「BanNoReferTb」プラグインの採用により、 ほとんどのトラックバック・スパムを押さえることができるようになった。
カテゴリー: MTスパム 22:47 | コメント (0) | トラックバック (2)
2006年2月22日
MovableType のスパム対策(12) 「MTBanASCII」
MovableType のコメントスパムに対する追加の対策として、 日本語を含まないコメントを拒否する「MTBanASCII」プラグインについて。MovableType のコメントスパム対策について、 コメント欄にhidden属性の変数を追加する方法について 長く議論してきた。 この方法をしばらく実際に運用してみると、 対策としてはまだ完全ではなく、いくつかのスパム・コメントが 投稿されてきていた。
そこで、1つの方法に頼るのではなく、 他のいくつかの対策を組み合わせることにより より高い確率でスパムを防止できるようになると考えて、 追加での対策を講じることにしてみた。
実際に来ているコメント・スパムの内容をみてみると、 そのほとんどが、英語もしくはヨーロッパ系の言語による内容である。 一方、我々が運用している日本語のブログ・サイトであれば、 そこに投稿される読者からの正しいコメントも 基本的に日本語を含んでいるハズである。 ということは、「日本語を含んでいないコメントを拒否する」 ことができれば、少なくとも、欧米系のコメント・スパムを回避できることになる。
いろいろ探してみた結果、辿り着いたのが blog.bulknews.net の 「MTBanASCII: コメントSPAM対策を MT3 に移植」 に解説してある方法。 「MTBanASCII」というMovableTypeのプラグインになっている。
このプラグインのインストールは前回の 「MovableType のプラグイン」で触れたとおり、 MovableTypeが走っているサーバーにログインしてから、 ディレクトリ「plugins」へ このプラグインのコードを置くだけ。 具体的には、
% cd /usr/www/users/mt/plugins % wget http://bulknews.net/lib/archives/mt-ban-ascii.plとした。
インストール後、動作テストしてみたが問題なく動作した。 従来からの対策と共にこのプラグインを実際にしばらく運用してみると、 大半のコメント・スパムを防止できるようになった。
カテゴリー: MTスパム 22:52 | コメント (0) | トラックバック (1)
2006年1月 2日
MovableType のスパム対策(11) 「コメントスパム対策(10)」
前回の 『MovableType のスパム対策(10) 「コメントスパム対策(9)」 』からの続き。 やっと、問題点が解決しましたので、今回はそのまとめ。コメントスパム対策を行ってきたなかで、 最後に残った コメント入力時の「名前」「メールアドレス」「URL」の 値が引き継がれない問題点は、 JavaScriptの問題だったとわかりました。 そこで、以前のエントリー でも、予告しておいた、 この問題への対応版コメントフォームを 今回、掲載させていただきます。 これは、このシリーズでは「CommentFieldsTemplate」と名付けているテンプレートで 現在、JTPAのサイトで実際に使っている内容です。
<MTEntryIfCommentsOpen> <h2>コメントしてください</h2> <MTIfRegistrationRequired> <MTIfNonEmpty tag="MTTypeKeyToken"> <div id="thanks"> <p>サイン・インを確認しました、 <script type="text/javascript" src="<MTCGIPath><MTCommentScript>?__mode=cmtr_name_js"></script> <script>document.write(commenter_name);</script> さん。続けてコメントしてください。 (<a href="<$MTCGIPath$><$MTCommentScript$>?__mode=handle_sign_in&static=1& entry_id=<$MTEntryID$>&logout=1">サイン・アウト</a>)</p> (いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナー の承認が必要になることがあります。承認されるまではコメントは表示されません。 そのときはしばらく待ってください。) <form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)"> <input type="hidden" name="static" value="<$MTCommentPreviewIsStatic$>" /> <input type="hidden" name="entry_id" value="<$MTEntryID$>" /> <input type="hidden" name="spammer" value="goaway" /> <input type="hidden" name="spamming" value="gotohell" /> <p><label for="url">URL:</label><br /> <input tabindex="1" type="text" name="url" id="url" /></p> <p>入力情報を記憶する: <input type="radio" id="remember" name="bakecookie" onclick="rememberMe(this.form)" /> <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><br style="clear: both;" /> </p> <p><label for="text">コメント:</label><br /> <textarea tabindex="2" id="text" name="text" rows="10" cols="50"></textarea></p> <div align="center"> <input type="submit" tabindex="3" name="preview" value=" 確認 " /> <input style="font-weight: bold;" tabindex="4" type="submit" name="post" value=" 投稿 " /> </div> </form> </div> <script language="javascript" type="text/javascript"> <!-- if (commenter_name) { document.getElementById('thanks').style.display = 'block'; } else { document.write('サイン・インしていません。このサイトにコメントをする前に登録してください。<a href="<$MTSignOnURL$>&v=1.1&<MTIfNeedEmail>need_email=1&</MTIfNeedEmail>t=<MTTypeKeyToken>&_return=<$MTCGIPath$><MTCommentScript>%3f__mode=handle_sign_in%26static=1%26entry_id=<$MTEntryID$>">サイン・イン</a>'); document.getElementById('thanks').style.display = 'none'; } // --> </script> <MTElse> コメント登録機能が設定されていますが、TypeKey トークンが設定されていません。 </MTElse> </MTIfNonEmpty> <MTElse> <MTIfNonEmpty tag="MTTypeKeyToken"> <script type="text/javascript" src="<MTCGIPath><MTCommentScript>?__mode=cmtr_name_js"></script> <script language="javascript" type="text/javascript"> <!-- if (commenter_name) { document.write('<p>サイン・インを確認しました、', commenter_name, ' さん。続けてコメントしてください。(<a href="<$MTCGIPath$><$MTCommentScript$>?__mode=handle_sign_in&static=1&entry_id=<$MTEntryID$>&logout=1">サイン・アウト</a>)</p>'); } else { document.write('<p>TypeKey ID を使って<a href="<$MTSignOnURL$>&v=1.1&<MTIfNeedEmail>need_email=1&</MTIfNeedEmail> t=<MTTypeKeyToken>&_return=<$MTCGIPath$><MTCommentScript>%3f__mode=handle_sign_in%26static=1%26entry_id=<$MTEntryID$>">サイン・イン</a> してください。</p>'); } // --> </script> </MTIfNonEmpty> <form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)"> <input type="hidden" name="static" value="<$MTCommentPreviewIsStatic$>" /> <input type="hidden" name="entry_id" value="<$MTEntryID$>" /> <input type="hidden" name="spammer" value="goaway" /> <input type="hidden" name="spamming" value="gotohell" /> <div id="name_email"> <p><label for="author">名前:</label><br /> <input tabindex="1" id="author" name="author" value="<$MTCommentPreviewAuthor$>" /></p> <p><label for="email">メールアドレス:</label><br /> <input tabindex="2" id="email" name="email" value="<$MTCommentPreviewEmail$>" /></p> </div> <MTIfNonEmpty tag="MTTypeKeyToken"> <script language="javascript" type="text/javascript"> <!-- if (commenter_name) { document.getElementById('name_email').style.display = 'none'; } // --> </script> </MTIfNonEmpty> <p><label for="url">URL:</label><br /> <input tabindex="3" type="text" name="url" id="url" value="<$MTCommentPreviewURL$>" /></p> <p>入力情報を記憶する: <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><br style="clear: both;" /></p> <p><label for="text">コメント: (日本語でお書き込みください)</label><MTIfAllowCommentHTML></MTIfAllowCommentHTML><br/> <textarea tabindex="4" id="text" name="text" rows="10" cols="50"><$MTCommentPreviewBody sanitize="a href"$></textarea></p> <div align="center"> <input type="submit" name="preview" tabindex="5" value=" 確認 " /> <input style="font-weight: bold;" type="submit" name="post" tabindex="6" value=" 投稿 " /> </div> </form> </MTElse> </MTIfRegistrationRequired> </MTIfCommentsAllowed> <script type="text/javascript" language="javascript"> <!-- if (getCookie("mtcmtauth") || getCookie("mtcmthome")) { document.comments_form.bakecookie[0].checked = true; } else { document.comments_form.bakecookie[1].checked = true; } //--> </script> </MTEntryIfCommentsOpen>
さて、これでこの問題は解決しましたが、 ムーバブル・タイプのスパム対策は、まだまだ続くことになります。
カテゴリー: MTスパム 22:00 | コメント (1) | トラックバック (3)
2005年12月30日
MovableType のスパム対策(10) 「コメントスパム対策(9)」
前回の 『MovableType のスパム対策(9) 「コメントスパム対策(8)」 』からの続き。 MTCommentPreview用のテンプレート・タグを使って inputフィールドの初期値を設定してみたが、 結果はダメだった。その後の考察。ここまでの実験結果をもう一度よく考えてみると、 inputフィールドに初期設定を行っているにも関わらず、 その値が消えてしまっていることになる。
通常、ブラウザーは送られてきたHTMLの内容を解析して その結果に従って画面を表示している。 この場合、ブラウザー側にバグがあることは考え難いし、 もし、ブラウザー側にバグがあれば、コメント本文の内容は引き継がれてこないことになってしまう。 ということは、 ブラウザーがHTMLの内容を解析して、きちんと初期値をフィールドに設定した後、 それが画面に表示されるまでのわずかな間に 誰かが、その値を消している(上書きしている)としか考えられない。 では、その「誰か」とは、 ブラウザー側で実行される別のプログラム、 つまり、「ブラウザー・サイド・スクリプト」、 この場合はJavaScriptの仕業としか考えられない。
そこで、もう一度よく MTCommentFields 部分の内容を確認してみると、 その中に
if (document.comments_form.email != undefined) document.comments_form.email.value = getCookie("mtcmtmail"); if (document.comments_form.author != undefined) document.comments_form.author.value = getCookie("mtcmtauth"); if (document.comments_form.url != undefined) document.comments_form.url.value = getCookie("mtcmthome");という記述がみつかった。 このスクリプトは、何をしているかというと、 comments_form という名前の入力フォームに email とか author とか url というフィールドが存在していたら、 それぞれのフィールドにクッキーからの値をセットする、 という内容になっている。 ちなみに、getCookie() という関数が別のところで定義されている。
クッキーからのデータを初期値として利用するのは、 確かに、最初のコメント画面、つまり、 では「Individual Entry Archive」では必要であるが、 そこから値が引き継がれるべき、
- コメント・リストのテンプレート (Comment Listing Template)
- コメント・プレビューのテンプレート (Comment Preview Template)
- コメント・エラーのテンプレート (Comment Error Template)
では早速とばかりに、そこで、MTCommentFields 部分 (ここでは「CommentFieldsTemplate」)から 上記 JavaScript の記述を削除してから、ページの再構築をしてみた。 実験の結果、今までの「名前」「メールアドレス」「URL」の 値が引き継がれない問題点が解決していた。
問題が解決したところで、最終的なまとめを次回にしてみよう。
カテゴリー: MTスパム 22:58 | コメント (0) | トラックバック (0)
2005年12月29日
MovableType のスパム対策(9) 「コメントスパム対策(8)」
前回の 『MovableType のスパム対策(8) 「コメントスパム対策(7)」 』からの続き。 コメント・スパム対策を行ってみたが、 コメントの「名前」「メールアドレス」「URL」がプレビュー画面に 引き継げない問題がおこった。それに対して、 MTCommentPreview用のテンプレート・タグを使って フィールドの初期値を設定してみたが、その結果について。結果から言うと、やっぱりうまくいかない。 こんな簡単なことで解決できていれば、 既に、先人の方々が解決されていることだろう。
具体的な実験方法としては、 コメントを書き込む欄の「名前」「メールアドレス」「URL」に 値を入れてから、[確認]ボタンをクリックして 「コメントの確認 (Previewing your Comment)」のページへ行ってたのだが、 それぞれの項目は空白のままであった。
では、新しく埋め込んだ <$MTCommentPreviewAuthor$> や <$MTCommentPreviewEmail$>& の テンプレート・タグの 動作に問題がある可能性があるので、 それらを、inputタグの中ではなく、 通常のHTMLテキストの中に実験的に埋め込んでみると、 最初のコメントページで「名前」「メールアドレス」「URL」欄に 入力された値がちゃんと表示された。 つまり、これらのMTCommentPreview用のテンプレート・タグは 正常に動作していることがわかる。
また、逆に、
<input tabindex="1" id="author" name="author" value="テストの初期値" />のようにテンプレート・タグでなく、通常のテキストを初期値として設定した場合は、 その値が消えてしまっていた。
さて、これは困った実験結果だが、 この後どうやってこの問題を解決してゆくべきか、 次回もう一度考えてみよう。
カテゴリー: MTスパム 22:26 | コメント (0) | トラックバック (0)
2005年12月28日
MovableType のスパム対策(8) 「コメントスパム対策(7)」
前回の 『MovableType のスパム対策(7) 「コメントスパム対策(6)」』 からの続き。 折角のコメント・スパム対策だが、細かな問題点が残ってしまった。 今回はその内容を解析してみよう。まず、「針中野ミュージック」さんのページ の コメントフォームのソースコード にある「名前」「メールアドレス」「URL」そして「コメント」についての フィールド記述をそれぞれみてみる。
名前:
<input tabindex="1" id="author" name="author" />メールアドレス:
<input tabindex="2" id="email" name="email" />URL:
<input tabindex="3" type="text" name="url" id="url" />コメント:
<textarea tabindex="4" id="text" name="text" rows="10" cols="50"><$MTCommentPreviewBody sanitize="a href"$></textarea>
となっている。これを見て気づくのは、最後のコメント用のフィールド定義には、 フィールドの初期値として MovableTypeのテンプレート・タグである <$MTCommentPreviewBody sanitize="a href"$> が記述されていることである。 ということは、MovableTypeの「名前」「メールアドレス」「URL」ようの タグも存在するのではないか、と推測できる。 そこで、調べてみると、 Movable Type ユーザマニュアル: テンプレート・タグ の コメントのプレビュー のページに、以下のタグがあることが書いてある。
- MTCommentPreviewAuthor
- MTCommentPreviewIP
- MTCommentPreviewAuthorLink
- MTCommentPreviewEmail
- MTCommentPreviewURL
- MTCommentPreviewBody
- MTCommentPreviewDate
名前:
<input tabindex="1" id="author" name="author" value="<$MTCommentPreviewAuthor$>" />メールアドレス:
<input tabindex="2" id="email" name="email" value="<$MTCommentPreviewEmail$>" />URL:
<input tabindex="3" type="text" name="url" id="url" value="<$MTCommentPreviewURL$>" />
の様に変更してから試してみた。 さてその結果は、というと、次回のお楽しみとさせていただこう。
カテゴリー: MTスパム 22:50 | コメント (0) | トラックバック (0)
2005年12月27日
MovableType のスパム対策(7) 「コメントスパム対策(6)」
前回の 『MovableType のスパム対策(6) 「コメントスパム対策(5)」』 からの続き。 「hidden属性の変数」によるコメントスパム対策を MovableType バージョン3以降でもできるような設定が完了した。 さて、その動作テストしてみた結果はと言うと。結果は、 正規のコメントの投稿は正常に動作しているし その後、実際のスパムの数も大幅に減少した。 まずは成功と言える。 参考にさせていただいたサイト様にはお礼を申し上げたい。
しかし残念ながら、細かな部分に問題が残った。 具体的に言うと、 コメントの投稿の際、 名前、メールアドレス、URL、コメント、 それぞれの項目が全て正常に入力されている状態から 直接[投稿]ボタンをクリックした場合は、問題なく投稿できる。 しかし、[確認]ボタンをクリックして 「コメントの確認 (Previewing your Comment)」のページへ行ったり、 または、名前、メールアドレスの入力が不適切で 「コメント登録のエラー (Comment Submission Error)」の画面に行ってしまった場合、 入力されていた項目の内容が引き継がれてこないで 欄が空白になってしまうのである。 変更前は各項目の内容が引き継がれていた。
これに関して、今まで参考にさせていただいた 「針中野ミュージック」さんのページ に寄せられているコメントに
コメントを記入して「確認」を押しプレビューに飛ぶと、 「名前」「メールアドレス」「URL」が空になってしまっているのですが これは僕の環境がわるいのかな。。??というカキコがある。そして、そのお返事として
ご指摘ありがとうございます。 おっしゃるとおり、現在はクッキーを使わないと、 「名前」「メールアドレス」「URL」がプレビューに 反映されない不具合が出ています。 こちらでも調査しており、 他の方からのアドバイスも受けて修正してみたりもしていますが、 未だ解決しておりません。とある。 しかしその後、この問題は解決はされていないようである。 折角ここまで来たので、何とか解決できないものか、 問題点を解析してみようと思う。
この方法が突破されてからその調査もストップしていたのですが、 まだまだこの方法を活用して下さる方もいらっしゃるようですので、 問題解決に向けて調査を続行しようと思います。
カテゴリー: MTスパム 21:58 | コメント (0) | トラックバック (0)
2005年12月26日
MovableType のスパム対策(6) 「コメントスパム対策(5)」
前回の 『MovableType のスパム対策(5) 「コメントスパム対策(4)」 』から、 問題の <MTCommentFields> の コメントフォームへの置き換えについての続き。前回のエントリーまでで、3つのコメント用テンプレートの修正が 終了したことになる。 それから、忘れていけないのが、 「個別エントリーアーカイブ(Individual Entry Archive)」の修正。
<input type="hidden" name="entry_id" value="<$MTEntryID$>" />と書いてある行が2箇所あるはずなので、その両方の直後に、 「女子十二月号」さん のダミー変数の指定方法方法
<input type="hidden" name="spammer" value="goaway" /> <input type="hidden" name="spamming" value="gotohell" />を追加することにする。
ここでの注意点についても 「針中野ミュージック」さんのページ から引用させていただくと、
ここでご注意。こちらの新しいテンプレートモジュールも、 そして普通に修正する「個別エントリーアーカイブ」も、 該当する箇所は2箇所ずつあります。 できればエディタの「検索」あるいは「置換」で 2箇所ともばっちり追加(修正)しておきましょうね。さらに
以上の改造を施して、サイトを再構築したのち、 一旦ふつうにコメントがつけられるかどうかをテストしておきましょう。 ただし、現段階ではまだコメントスパム対策はできていません。 仕上げの「mt-comments.cgi」改造が必要です。そのCGI改造方法を「女子十二月号」さんのページ から引用させていただくと、 「mt-comments.cgi の "use strict;" 文のすぐ下に以下を追加する」とある。
use CGI qw(:standard); if ($ENV{'REQUEST_METHOD'} eq "POST") { my $data = param('spammer'); die unless ($data); } use CGI qw(:standard); if ($ENV{'REQUEST_METHOD'} eq "POST") { my $data = param('spamming'); die unless ($data); }ここまでの変更を行った後、 サイトの再構築を行えば完成のハズである。 また、テスト方法についても既に書かれており、
この改造を施した mt-comments.cgi をアップロードしたら、 コメントがちゃんとできるかどうか動作確認してください。 少なくとも、コメントのプレビューを見ないですぐ投稿、 とプレビューを見てから投稿、の2通りは最低確認しましょう。とある。 では、実際の動作を試してみた結果については 次回のエントリーにしよう。
カテゴリー: MTスパム 22:41 | コメント (0) | トラックバック (0)
2005年12月25日
MovableType のスパム対策(5) 「コメントスパム対策(4)」
前回の 『MovableType のスパム対策(4) 「コメントスパム対策(3)」 』からの続き。 「hidden属性の変数」によるコメントスパム対策の MovableType バージョン3以降対策の具体的な設定方法について。問題の <MTCommentFields> は コメントフォームに置き換えればよさそうだ、 ということまではわかったが、 対応しなければならないテンプレートは、
- コメント・リストのテンプレート (Comment Listing Template)
- コメント・プレビューのテンプレート (Comment Preview Template)
- コメント・エラーのテンプレート (Comment Error Template)
そして。同じフォームのコピペするくらいなら、 MovableTypeだけにもっと賢い方法があるでしょう♪ そ・れ・は テンプレートモジュール!とおっしゃられている。 このテンプレートモジュールの設定方法について、 「針中野ミュージック」さんページを参考にしながら、 私なりのやり方をご紹介させいただく。
MovableType管理画面のテンプレートのページを開いて、 テンプレート・モジュール(Template Modules)の セクションにある 英語版なら「Create new template module」 日本語版なら「新しいテンプレート・モジュールを作る」 というリンクをクリックする。 すると新しいテンプレートを登録できる 「テンプレートの編集(Edit Template)」 という画面になる。
「テンプレートの名前(Template Name)」欄に このテンプレートの名前を打ち込む。 ここでは、「CommentFieldsTemplate」としてみた。
その下の 「モジュールの中身(Module Body)」欄に 「針中野ミュージック」さんのページ にある コメントフォーム をコピー&ペーストする。
【ご注意】それから、「針中野ミュージック」さんのサイトにあるものから 少し変更させていただき、 ダミー変数の指定方法を「女子十二月号」さんの方法
後述のとおり、こちらの コメントフォーム には別の問題点がありました。 その問題への対応版コメントフォームを後ほど掲載する予定です。
<input type="hidden" name="spammer" value="goaway" /> <input type="hidden" name="spamming" value="gotohell" />に準じた記述に変更させていただいた。
次に、先ほどの3つのテンプレートにある 「<MTCommentFields>」 もしくは 「<MTCommentFields preview="1" static="1">」 と書かれている部分を、
<$MTInclude module="CommentFieldsTemplate"$>と書き換える。
これで、デフォルトの <MTCommentFields> の代わりに、 オリジナルのコメントフォーム(テンプレートモジュール)が適用されようになる。 で、その次は、っと、続きは次のエントリーとさせていただこう。
カテゴリー: MTスパム 22:11 | コメント (0) | トラックバック (0)
2005年12月24日
MovableType のスパム対策(4) 「コメントスパム対策(3)」
前回の 『MovableType のスパム対策(3) 「コメントスパム対策(2)」』からの続き。 「hidden属性の変数」によるコメントスパム対策の MovableType バージョン3以降での対策について。同じような問題でお悩みの方はたくさんいるはず、と思い、 いくつかのリンクを辿ってみる。 すると、みつかった。
針中野ミュージック さんのブログエントリー 「コメントスパムなんて大嫌い for MovableType 3.1」 この問題の解決策についての部分をいくつか引用させていただくと、
ではどうするか。ということで、 「MTCommentFields」に代わるコメントフォームが紹介されている yujilog さんの 「MovableType 3.01D-ja 導入」 というページへのリンクが紹介されている。 ところが残念ながら、既にそのページはなくなってしまっているようだ。 しかし、さすが 針中野ミュージック 様。 ブログページ内に その コメントフォームを残しておられるので、 後ほど、しっかり利用させていただくことにしよう。
<MTCommentFields> を自分で作ってしまうのです。 正確には、それに代わるオリジナルのコメントフォームを作って、 それに例のダミー変数を入れちゃえばいいんです。
ちなみに、上記 yujilog の執筆者yujiさんとは、 私もよくお世話になっている、 あの PukiWiki の原作者であられるらしい。 yujiさんは PukiWiki を開発されるほどの PHPの達人でいらっしゃるでので、 おそらく、Perlをベースにした MovableType から PHPで記述されている WordPress の方へ移行されたのではなかろうか。 そのため、「MovableType 3.01D-ja 導入」というページはすでに 消滅してしまったのであろう。
さて問題の <MTCommentFields> は コメントフォームに置き換えればよさそうだ、 ということまではわかったところで、続きは次回としよう。
カテゴリー: MTスパム 22:08 | コメント (0) | トラックバック (0)
2005年12月23日
MovableType のスパム対策(3) 「コメントスパム対策(2)」
前回の 『MovableType のスパム対策(2) 「コメントスパム対策(1)」』からの続き。 「hidden属性の変数」によるコメントスパム対策の具体的な設定方法について。「女子十二月号」 さんの MovableTypeコメントスパム対策 に従って具体的な対策を行ってみよう。 始めの作業部分を引用させていただくと、
実際にこれに従って作業してみようと、 MovableType管理画面のテンプレートのページを開いてみる。 ここで、ひとつの問題にぶつかる。 確かに、「Individual Entry Archive」には コメント投稿用の <form>と</form> があるので、 そこに上記2行を追加することはできる。 しかし、残りの3つのテンプレートの中身を見てみても、 何処にもコメント投稿用の <form>と</form> がないのである。早速コメント欄に変数を書き込みます。
追加は、Individual Entry Archive Comment Listing Template Comment Preview Template Comment Error Templateの<form>と</form>の間に行います。
入れた値は、<input type="hidden" name="spammer" value="goaway" /> <input type="hidden" name="spamming" value="gotohell" />の二つです。二つにしたのは少しは強化できるかと思ったからです。
では、どうやってコメント投稿部分を記述しているか、というと、 これらのテンプレートには
<MTCommentFields>もしくは
<MTCommentFields preview="1" static="1">というタグが1行記述されているだけなのである。
「女子十二月号」さんのブログ のトップページを拝見すると、 MovableTypeのバージョンが 2.661 となっている。 おそらく、ここに記述されている方法は MovableType バージョン2を対象としており、 MovableType バージョン3以降では別の対応が必要と思われる。
さて、この問題にどうやって対応したらよいのか、 次回から研究してみよう。
カテゴリー: MTスパム 23:44 | コメント (0) | トラックバック (0)
2005年12月22日
MovableType のスパム対策(2) 「コメントスパム対策(1)」
MovableType の コメントスパム対策については 既にいくつかの方法がネット上で紹介されているが、 今回はまず、「女子十二月号」 さんの MovableTypeコメントスパム対策 を参考にさせていただくこととする。このサイトで紹介されている方法は、英語サイトではあるが Comment Spam Quick Fix というページを参考にして、 さらにそれを独自に強化された方法を紹介されている。
文中、このコメントスパム対策のしくみについても説明されているので、 その部分を引用させていただくと、
通常あるエントリーを読んだ人がコメントをつけるときは 必ずコメント欄を使用して書き込むのですが、 Spammerはmt-comments.cgiを直接アクセスして書き込みます。 そこでコメント欄にhidden属性の変数を追加して値をmt-comments.cgiに渡し、 mt-comments.cgiはその変数が存在するかチェックするようにしておきます。 すると、MovableTypeの素のmt-comments.cgiを前提にしているSpammerは その変数に値を入れることができないため書き込むことができないということのようです。と、ある。 これを私なりに別の表現でご説明させていただくと
MovableTypeでは通常、 エントリーの個別ページに それぞれコメント記入欄があるが、 これらのエントリーの どのページからコメントを投稿(POST) しても、 この mt-comments.cgi という一つのCGIが呼び出されることになり、 投稿された全てのコメントを受け取る処理を行うことになっている。
一方、スパムを送りつけてくる人 いわゆるスパマーは ブログの各ページを開いて、そこにコメントを書いて投稿する、 というような めんどくさい ことはしない。
スパマーは、上記のmt-comments.cgi というCGIに向かって直接 スパム・コメントを投稿してくる。 MovableTypeで(mt-comments.cgiで)受け取る コメントに関する情報のフォーマットは既に決まっているため、 それに合わせた、専用のプログラムを書いて 投稿作業を全自動化しているわけだ。
そこで、コメントスパム防止策として mt-comments.cgi を改造し、 ある追加情報(変数)が一緒に投稿されなければ、コメントを受け取らなくする。 これによって、スパマーのスパム自動送信プログラムからの投稿を受け付けなくできる。
ところがこのままでは、正規のコメントも受け付けられなくなってしまうので、 ブログの個別ページからの正規コメントの投稿の際には、 その追加情報(変数)も一緒に送られるようにする必要がある。 この追加情報が引用文中の「hidden属性の変数」である。
さて、コメントスパム防止策のしくみが判ったところで、 実際の変更作業については次回からのエントリーで。
カテゴリー: MTスパム 22:32 | コメント (0) | トラックバック (0)
2005年12月21日
Movable Type のスパム対策(1)
自分のこのブログサイトもそうだし、 私がお手伝いさせていただいている JTPAのホームページ もそうなのだが、ムーバブルタイプ(Movable Type) で サイトを構成していて、かつ、コメント(Comment) と トラック・バック(Trackback) を許可しているサイトでは、 スパム(SPAM) の問題が避けて通れなくなる。 特に最近、JTPAのホームページ に対するスパム(SPAM)がひどい。 そこで、ムーバブルタイプ(Movable Type)のサイトへのスパムと、 それに対する対策について研究してみることにする。では、どこから手をつけるかだが、 Movable Type のスパム対策と一言で言っても、 コメント(Comment)に対するものと、 トラック・バック(Trackback)に対する対策の 大きく2つに分けられる。
Movable Type 自身が持っている対策として 「禁止IP」という機能がある。 これは、スパムを送りつけてきた相手のIPアドレスを登録しておき、 次回からは そのアドレスからの コメントやトラック・バックを 受け取らなくする、という機能である。 しかし、実際にスパムを送りつけてくるIPアドレスを見てみると、 敵もさる者、固定したアドレスではなく、 いろいろなIPアドレスから送りつけてきている。
また、最新の Movable Type 3.2 には 「迷惑コメント/トラックバック管理機能の標準搭載」 ということで、 スパム・フィルタープラグインSpamLookupを標準搭載していると言うことだが、 JTPAのホームページのMovable Type をバージョンアップするのも 今すぐには大変なので、現バージョンのままでの対策を研究しててみることにする。
カテゴリー: MTスパム 22:37 | コメント (0) | トラックバック (0)