TIPS
MTスパム対策その後
1月 20th
make_bm_linkなどCMS.pmでの「Subroutine xxx redefined」エラー
12月 11th
なんかずっとApacheのエラーログに出続けていて、けど動作上問題ないので放置しておいた(!)エラーで次のものがありました。
例)
Subroutine make_bm_link redefined at lib/MT/App/CMS.pm line 1437.
Subroutine _bm_js redefined at lib/MT/App/CMS.pm line 1501.
Subroutine reg_file redefined at lib/MT/App/CMS.pm line 9157.
大体上記3行がワンセット。
自分がmt.cgiにアクセスしたときは必ず出ていて、他の知らない人がmt.cgiへアクセスしたときにも出てるっぽい。
それらエラーログは数週間で数万行にものぼり、つまり、それだけmt.cgiにも不正アクセスを繰り返している輩が多いということでしょうか。CGI負荷の観点から行くとmt.cgi自体もやはりリネームしておいたほうが無難か。。
最近Apacheのログ調査をしているので、mt.cgiへのアクセスは邪魔なのでログに乗らないようにしていたけど、ちょっとここらへんも戻してきちんと調査してみよう。
で、話は戻って上記のエラーは調べたところ、alogblogのQuickImagePostプラグインが原因だったみたい。
[root@linux alogblog]# grep make_bm_link QuickImagePost.pl
sub alogblog_make_bm_link {
*MT::App::CMS::make_bm_link = \&alogblog_make_bm_link;
[root@linux alogblog]# grep _bm_js QuickImagePost.pl
$param{bm_js} = $app->_bm_js($param{bm_show}, $height);
$app->uri( ‘mode’ => ‘reg_bm_js’,
sub alogblog_bm_js {
*MT::App::CMS::_bm_js = \&alogblog_bm_js;
[root@linux alogblog]# grep reg_file QuickImagePost.pl
sub alogblog_reg_file {
*MT::App::CMS::reg_file = \&alogblog_reg_file;
要は関数が再定義されてますが?っていうエラーなんでしょうか。
QuickImagePostプラグインは入れてちょっと使った後は全く使ってなかったので単純にプラグインを削除して解決しました。ググってもあまり出てこなかったけど、参考URLは
http://alogblog.com/movabletype/plugins/enjoy_your_posting/
です。
それにしてもApacheのログというのは見れば見るほど「こいつ何やってんの?」っていうものが多いですねぇ。。( つД`)
AddToHatenaBookmarkプラグインを入れてみた
12月 5th
ogawaさんの「AddToHatenaBookmark」プラグインを入れてみました。
概要としては引用すると、
このプラグインは、公開状態のエントリーを更新したり、新規に公開状態のエントリーを追加したときに、そのエントリーをはてなブックマークの自分のブックマークに追加するものです(参考: Update-n-Pingプラグイン)。
イマイチ用途が分かりにくいかもしれませんが、この作業をマニュアルでやっている人もいるようです。自分のブログをはてなブックマークで宣伝できるという一次的なメリットに加え、みんなでこれをやれば、はてなブックマークの検索機能をブログ検索機能として利用できるという二次的なメリットもありそうです (つーか、3ユーザがブックマークしないとダメか?)。
です。
自分の書いたエントリを自動的にブックマークに追加してくれるのでそれだけで1user追加されるのですぐ、というわけでなくても「いずれきっと」効果を発揮してくれると思います。
ここからAddToHatenaBookmark.zipをダウンロードしてプラグインのディレクトリに放り込むだけなんですが、ちょっと問題が出ました。
Can’t locate loadable object for module DateTime in @INC (@INC contains: ~
というようなエラーが発生して、プラグインの設定画面で正しく表示されない。
これは、DateTimeモジュールというPerlのモジュールが正しく組み込まれていない、というかMTのディレクトリにあるDateTimeモジュールを使おうとして(mt/extlibディレクトリにある)、エラーとなったというもの。
サーバで同モジュールを組み込むことで解決できました。
FedoraCore5+x86_64なのでMTの用意したモジュールではダメだったのかも。
手順としては、
extlib/DateTime/
extlib/DateTime.pm
extlib/DateTimePP.pm
extlib/DateTimePPExtra.pm
をどこかのディレクトリにmvで退避しておいて、
yum install perl-DateTime
とするだけでした。(ogawaさん、ありがとうございました)
今後同様なエラーで試せる手順だと思います。
さて、このプラグインを有効にして、プラグインの設定画面でユーザIDとパスワードを指定すれば、エントリを書いたり更新したりするだけで自動的にブックマークされます。
確認方法はMT管理画面の「ログ」を見れば出ています。
[AddToHatenaBookmark] updateEntry suceeded: http://b.hatena.ne.jp/atom/edit/3405559
また、既にはてなブックマークに登録されているエントリでも更新するとはてなへ「追加」に行きますが、既に登録済みであれば自動でスキップされます(重複登録されることはありません)。
[AddToHatenaBookmark] updateEntry skipped: http://b.hatena.ne.jp/atom/edit/3405989
実際にはてなの自分のブックマークを見ると下の赤い四角の枠内ように自動的に追加されてます。

その際に、タグのところに表示される言葉は、エントリの「キーワード」に指定すると自動的にタグ付けされるのでこれも便利です。(但し、できれば日本語は避けたほうがいいみたい)
キーワード欄の解釈方法はTagwireプラグインと共通です。ブラケット[]、シングルクォート・ダブルクォートで囲まれた文字列は一個のタグとして認識します。また、「;,|」は区切り文字として機能します。キーワード欄に「;,|」が含まれない場合には空白文字が区切り文字として機能します。
下記の例はすべて「Movable Type」と「Plugin」という二個のタグとして認識する。
“Movable Type” Plugin
Movable Type, Plugin
Movable Type|Plugin|
[Movable Type][Plugin]
あとこのプラグインとは別の話として、自分としては、

のようにエントリの下に上図赤丸みたいに表示したいのですが、これはどうやったらできるんでしょう?
その他参考URL:たねちゃんズ12: 初期化ってレベルじゃねぇぞ!
403 Throttledエラーの原因
12月 2nd
以前2ヶ月ほど前にSixApartへのトラックバックでしょっちゅう403 Throttledエラーが出て困っていたときに調べたときはほとんど情報がなかった記憶があるが(確か、よく調べたはずなんだけど)、まさか自分のサイトでも同じことが起こるとは・・・( ̄Д ̄;;
たねちゃんさんからのコメントでそういう事象が起きていることを知りました。
検索してみると、非常に分かりやすく解説して下さっているサイトを見つけました。
hxxk.jp - Movable Type の HTTP error: 403 Throttled に関するまとめ
Throttling 機能とは Movable Type 3.1 から実装された機能で、コメントやトラックバックなどが大量かつ連続して送られてきた場合に、システムが過負荷状態に陥らないようにコメントやトラックバックの受付を行わなくする機能です。
よって、 Throttled というのはコメントやトラックバックの受付制限を超えてしまい、受け付けられなかったということです。
関係するディレクティブは以下の3つ。
●ThrottleSeconds
・サイトの閲覧者がコメントを投稿した後に、再投稿できない時間を秒数で指定
・初期値:20
●OneHourMaxPings
・1時間に受け付けられる最大値
・初期値:10
●OneDayMaxPings
・1日に受け付けられる最大値を設定
・初期値:50
MT3.3では直接以下のようにmt-config.cgiに追記する。
(例)
ThrottleSeconds 30
OneHourMaxPings 10
OneDayMaxPings 120
全て自分のサイトに来るコメントやトラックバックの数に応じて決める必要あり。
ここでこれらはそもそも、コメントやトラックバックのCGIが処理を行う時に影響する数字です。
つまり、コメントCGIやトラックバックCGIのリネームによる対策
たねちゃんズ12: CGIリネーム完全熟成版、そして究極版へ
などをしていればその数は減らせるはずです。
もともとSixApart社もコメントスパムやトラックバックスパムがここまでひどくなるとは想定していなかったことによるデフォルト値であって、正当な来訪者でない人のためにこれら制限に引っかかって正当なコメントやトラックバック投稿者が403 Throttledになってしまうのは悲しい現実です。
やはり、コメントやトラックバックのCGIが動作する以前にスパムを受け付けないようにするのが最も効率的で理にかなっており、IPではじく手法と上記たねちゃんさんのCGIリネームなどが有用と思います。
是非お試しあれ。
BetterFileUploader2.0
11月 20th
MT3.2時代に大変お世話になっていたBetterFileUploaderですが、MT3.3になってからはBigPAPI依存だったこのプラグインが使えなくなっていました。
やはり画像などファイルをアップロードする際に、デフォルトの「ファイルのアップロード」では、いちいちパスを指定しないといけないし(※)、面倒なので最近はあまり画像をアップするのもやめてました。
※テンプレートを直接いじればアップロードパスは変更できますが、「現在の年月」をベースにした自動処理をするのは簡単ではないし、テンプレートをいじればアップグレードで元に戻ってしまうので効率的でない。
そして、ようやく新バージョンのBetterFileUploaderがリリースされました。
Eat Drink Sleep Movable Type
但し、残念ながらフリーではなくなったので、購入が必要です。($10くらい)
勢いで購入してしまいました(笑)
インストール自体はプラグインディレクトリに丸投げでOKです。
設定はシステム・メニューの「プラグイン」からできます。
「Click to override weblog-specific settings with system-wide settings」
のチェックをONにすると以下画面が出てきて、全て英語ですが特別難しく考えなくてもそのままでもOKです。
画像のサムネイルのサイズは縦・横の長いほうのピクセルを書いておけば自動的にその大きさにしてくれるので自分のブログのエントリの幅と相談しながら最大許容量を入れておけばいいと思います。
(早速BetterFileUploaderを使いながら画像アップ!)
TagClickでタグクラウド風なタグ検索パネル
8月 19th
MT3.3になってから純正の機能としてタグが導入されたわけだが、MT3.2の頃からタグは避けて通ってきた(オイ…)のでいまいちその便利さとかが分からないけど、習うより慣れろってことで今更ながらやってみることにした。
タグって何?
「タグ」とは、ブログのエントリーをグループ分けするために付けるジャンルやグループを表す「しるし」のことです。ひとつのエントリーに対して自由に複数のタグを付けることができるので、一般的なカテゴリーによる分類よりも柔軟性の高いグループ分けができます。また、タグはあとからいつでも追加・修正できるので、細かいことは気にせず気軽に付けていくことができます。
でも、これって当然1からエントリに自分でタグ付けしていかないといけないわけで、どうせならついでにMT以外のサービスでそういうのが簡単に導入できるものがないか調べた。できればMTと連携してくれるような。。(欲張りすぎ?)
いくつか試したけど、どれもいまいちよく分からん。
一番自分的に直感的に分かったし、便利かなって思ったのはTagClickというタグ検索パネルをJavascriptで提供するサービス。MTと連携してエントリ投稿時にping飛ばすとタグとエントリ情報を自動追加してくれる。
以下、また引用。
ブログのエントリー件数が増えてくるとカテゴリー分けが大変になってきませんか?ひとつのカテゴリーに沢山のエントリーが集中して過去のエントリーが探しにくくなったり、あたらしいエントリーを追加する際にどのカテゴリーに含めれば良いか迷ったりしますよね。前述のとおり、タグを利用するとカテゴリーよりも気軽に、柔軟性の高いグループ分けができます。気軽にどんどんタグを付けくことで、あなたのブログに来た読者が目的のエントリーを見つけられる可能性がうんと高まります。
ふむふむ、なんとなく分かるような分からんような。
で、まずはどんなものかっていうと、こんな感じ。
文字が大きいタグほど、そのタグが付けられたエントリが多いってことになります。
クリックしてみると分かるけど、別の子画面が開いて、そこにそのタグの関連付けされたエントリが表示されて、エントリのリンクをクリックすると、元の画面にそのエントリが表示されるので、その子画面は「タグのコントローラ」的な役割を果たす。
そして、何よりサクサク動くので結構気持ちいい。
まだ200くらいあるエントリのうちの一部しかタグ付けしてないので全部は拾えないけど、順次やっていくのでたまにクリックしてみてくださいな。(右サイドバーにあるので。。)
MTの純正のタグでももちろんできることだけど、結局CGIなのであまりサーバに負荷をかけたくないのと、サクサク開かない(サーバのスペックが。。)、タグ付け自体はエントリ書き出しでまた戻したとしても、適宜修正するのに管理画面のほうは更に激遅でイライラする、などでとりあえず保留・・・
あと、こうした外部サービスの場合、そこのポータルの検索サービスからの来訪者も来る、というメリットもある。
ちと、しばらく試してみよっと。
プルダウン式「ListMe!」の導入
8月 18th
ちょっと最近いろいろ導入したシリーズ第2弾!
これもかなり今更的なものですが、ようやく入れてみた。
↓こんなやつ
こういうのってやっぱりあったほうがいいと思う。
お互いにリンクしやすくなるし、サイトを日常的に見てもらえるようになるわけだし。
ちょっとここいいブログでない?って思ったときに、これ(とあと前のエントリのRSSリーダへの一発登録ボタンとかかな。。)があるかないかで単なる通りすがりで終わるかリピーターになってくれるかどうか多少は運命を分けるかも??
まあ、本当にいいサイトなら幾通りもの方法でまたすぐたどり着けるんだけどね。。
さあて、今更な導入方法ですが、、
下のソースをコピーして自分のテンプレートに貼っつけて自分のURLなどに書き換えるだけでした。。
※参考:blog*citron | プルダウン式ListMe!ver1.2
Project MultiBurst:プルダウン式「ListMe!」の導入
MTテンプレートの編集
※MovableTypeでなくてもテンプレートの編集画面があるブログなら基本的にJavascriptなので導入可能!
<!--ListMe_start-->
<form action="./" name="topic" id="topic">
<select name="list" size="1" class="listme">
<option value="javascript:void(window.open('http://www.blogpeople.net/addlink.jsp?n=1&u=' + escape('★ブログのURL★') + '&ti='+escape('★サイト名★'),'blop','scrollbars=no,width=475,height=350,left=75,top=175,status=yes,resizable=yes'));">BlogPeople</option>
<option value="javascript:void(window.open('http://tags.blogpeople.net/tags_addlink.jsp?u='+escape('★ブログのURL★')+'&ti='+escape('★サイト名★'),'BlogPeopleTags','scrollbars=no,width=480,height=320,left=100,top=100,status=yes,resizable=yes'))">BlogPeopleTags</option>
<option value="http://a.hatena.ne.jp/append?★ブログのURL★">はてなアンテナ</option>
<option value="http://r.hatena.ne.jp/append/★RSSのURL★">はてなRSS</option>
<option value="javascript:void(window.location='http://b.hatena.ne.jp/add?mode=confirm&title='+escape('★サイト名★')+'&url='+escape('★ブログのURL★'));">はてなブックマーク</option>
<option value="http://www.bloglines.com/sub/★ブログのURL★">Bloglines</option>
<option value="http://e.my.yahoo.co.jp/config/jp_promo_content?.module=jp_rss&.url=★RSSのURL★">MyYahoo!RSS</option>
<option value="javascript:void((function(){var w=window.open('http://rss.drecom.jp/shortcut/add_rss?url='+encodeURIComponent(location.href),'add_rss','scrollbars=yes,width=450,height=500,left=100,top=100,status=yes,resizable=yes');w.focus();})());">DrecomRSS</option>
</select>
<input value=" ListMe! " type="button" onclick="location.href=list.options[list.selectedIndex].value" class="listme_sub" />
</form>
<!--ListMe_end-->
CSSの編集
これまた以下をコピペで!
/* ListMeメニュー */
select.listme {
font-size:10px; /* 文字サイズ */
color:#666666; /* 文字カラー */
background:#fff; /* 背景色 */
font-family: “ヒラギノ角ゴ Pro W3″,”Hiragino Kaku GothicPro”,”Osaka”,”Verdana”,”MS Pゴシック”,”sans-serif”; /* フォント指定 */
}
/* ListMe登録ボタン */
input.listme_sub {
font-size:10px; /* 文字サイズ */
color:#fff; /* 文字カラー */
background:#808080; /* 背景色 */
border:none; /* ボーダー設定 */
font-family:Verdana,Arial,sans-serif; /* フォント指定 */
}
はてなやドリコムRSSにも対応してます。
WidgetもPHPモジュール化
8月 11th
なんかMT3.3になってからサイトの再構築にどえらい時間がかかるようになってしまっていました。
ひとまずおなじみの「エントリー本文のPHPモジュール化」と「エントリー追記のPHPモジュール化」をやりました。これらについてはもう掃いて捨てるほど情報があるので割愛しますが、以下が参考になります。
あなたのmovabletype、重たくないですか?(テンプレートモジュール化)
本文もモジュール化!~ MovableType
さて、Widgetについては例えばサイドバーなどで表示させていることが多いと思いますが、それこそ全エントリに同じ情報を埋め込むわけで、最も冗長且つ、再構築を遅くしている要因と思われます。
ここをPHPモジュール化すれば、同じ情報を1ファイルから読み込むだけで済むようになるので効果大のはず。
Cronによる定期的なCGIリネームで抜本的スパム対策
6月 27th
CGIリネームの定期自動実行をしてスパム対策になるかどうかの実験をしてみました。 トラックバックスパムやコメントスパム対策については大きく分けると以下の2つの方法が取られていると思います。
- スパムをフィルタリングするプラグイン
- トラックバックやコメントのCGIファイルをリネーム
私は両方でやってきましたが、一番理想的なのは後者だと思っています。 なぜなら、スパム業者はサイトを訪問することなくMTのCGIのファイル名を決め打ちで送りつけてくるからです。 来ると分かっているものに対してはプラグインでフィルタリング動作させるはサーバの負荷という面では良くない。 CGIリネームをしておけば、そもそもサーバにスパムが来ても存在しないURLに対してくるわけで、せいぜいWEBサーバのログに残るくらいです。 (サーバのログ例)
——————— httpd Begin ———————— A total of 16 unidentified ‘other’ records logged with response code(s) POST /mt/mt-tb.cgi/34 HTTP/1.0 with response code(s) 4 404 responses←存在しないURLにアクセスがあって404レスポンスを返しているPOST /mt/mt-tb.cgi/42 HTTP/1.0 with response code(s) 1 404 responses POST /mt/mt-tb.cgi/26 HTTP/1.0 with response code(s) 1 404 responses
CGIが動作するまでもないわけです。(ざまーみろ、という感じですね(笑))
そして、リネームされていても通常の正当な(?)訪問者によるコメントやトラックバックはサイトに表示されている、あるいは埋め込まれているリネーム後の CGIに対して来るので問題ない。 けど、このCGIリネーム、しばらくすると一部スパム業者は巡回ツール等を駆使してリネーム後のCGI名を拾ってしまい、またスパムが来始めます。 (実際、やはり2週間くらいしたらリネーム後のCGIにスパムが来始めました。) ということで、週に1度くらいの頻度でCGIを自動的にリネームできないか考えてみた。
More >
MYSQLでスパム状況調査
5月 31st
実は後日アップする予定の対策を行ったことにより(たねちゃんさん、素晴らしいTIPSあざーすm_O_m)、スパムがパッタリ止まったのだが、スパムの状況というか日々の傾向をもっと分かりやすく見る方法をご紹介。
どれくらいスパムが来てるかなぁ?なんて見ようと思ってMTの「トラックバック」→「迷惑トラックバック」タブや、「コメント」→「迷惑コメント」タブを見ても、どわーーーーーーーーーーーーーってずらずら順番に表示されるだけで、「この日は何件スパムが来て、この日以来何日間来てなくて、また来始めた!」なんていうのを見ようと思うとかなり厳しい、というかきっと途中で諦めますよね?(笑)
MySQLが使える環境であれば、以下のSQLを打ち込むだけでもっと見やすく一覧で表示できます。
MySQLを操作する方法としては以下の2通りでしょうか?
- サーバにTelnetなりsshなりで入ってコマンドでmysqlを起動
- レンタルサーバならmysqladminというツールが使える(?)と思うのでそれを使ってSQLを入力
→MySQLを実行できるユーザで「mysql -p database」としてdatabaseのところにMTのDB名を入れてEnterを押すとパスワードを聞かれるのでパスワードを入力
トラックバックスパム
■累計表示:入力するSQL
SELECT tbping_junk_status, COUNT(*) FROM mt_tbping GROUP BY tbping_junk_status;
■結果
+--------------------+----------+ | tbping_junk_status | COUNT(*) | +--------------------+----------+ | -1 | 414 | | 0 | 29 | | 1 | 1 | +--------------------+----------+ 3 rows in set (0.01 sec)
414が今までに来たトラックバックスパム
■日別の小計表示:入力するSQL
SELECT SUBSTRING(tbping_created_on,1,10), COUNT(*) FROM mt_tbping WHERE tbping_junk_status=-1 GROUP BY SUBSTRING(tbping_created_on,1,10);
■結果
+-----------------------------------+----------+ | SUBSTRING(tbping_created_on,1,10) | COUNT(*) | +-----------------------------------+----------+ | 2006-03-22 | 3 | | 2006-03-27 | 3 | | 2006-03-29 | 3 | | 2006-04-07 | 4 | | 2006-05-10 | 5 | | 2006-05-15 | 5 | | 2006-05-16 | 2 | | 2006-05-17 | 20 | | 2006-05-18 | 39 | | 2006-05-19 | 15 | | 2006-05-20 | 1 | | 2006-05-21 | 14 | | 2006-05-22 | 18 | | 2006-05-23 | 20 | | 2006-05-24 | 36 | | 2006-05-25 | 50 | | 2006-05-26 | 38 | | 2006-05-27 | 52 | | 2006-05-28 | 51 | | 2006-05-29 | 3 | | 2006-05-30 | 32 | +-----------------------------------+----------+ 21 rows in set (0.05 sec)
どうです?割と一目瞭然?
同様にコメントスパムのほうも・・・
コメントスパム
■累計表示:入力するSQL
SELECT comment_junk_status, COUNT(*) FROM mt_comment GROUP BY comment_junk_status;
■結果
+---------------------+----------+ | comment_junk_status | COUNT(*) | +---------------------+----------+ | -1 | 292 | | 0 | 5 | | 1 | 180 | +---------------------+----------+ 3 rows in set (0.00 sec)
トラックバックスパムに比べると少なめ?
■日別の小計表示:入力するSQL
SELECT SUBSTRING(comment_created_on,1,10), COUNT(*) FROM mt_comment WHERE comment_junk_status=-1 GROUP BY SUBSTRING(comment_created_on,1,10);
■結果
+------------------------------------+----------+ | SUBSTRING(comment_created_on,1,10) | COUNT(*) | +------------------------------------+----------+ | 2006-05-11 | 3 | | 2006-05-14 | 26 | | 2006-05-15 | 9 | | 2006-05-16 | 13 | | 2006-05-17 | 8 | | 2006-05-18 | 14 | | 2006-05-19 | 49 | | 2006-05-20 | 4 | | 2006-05-21 | 2 | | 2006-05-23 | 34 | | 2006-05-24 | 73 | | 2006-05-25 | 40 | | 2006-05-26 | 16 | | 2006-05-27 | 1 | +------------------------------------+----------+ 14 rows in set (0.02 sec)
コメントスパムは5月11日までは来たことなかったというように見えるけど、実はSpamLookupの設定をしてなかったから自動的に受け付けてしまってて、手動で削除なんかしてたから表示されてない。。
見てお分かりの通り、1時間に5件くらいのペースで来ていたトラックバックスパムは5/30でぱったり止まり、コメントスパムのほうは5/27以来止まってます。
スパム業者よ、さらばだ!(といいつつまた来たりして?
)