movabletype.jp
検索

5.13、5.07、4.38 パッチリリース(プラグインの「Template load error」エラー修正)

注意 : このパッチは、3月1日のリリース後に発見された新たな問題を修正するために、3月5日に更新しています。3月5日以前にパッチを適用しても、引き続き「Template load error」エラーが発生する場合は、再度、本ページよりパッチをダウンロードして適用してください。

2月22日にリリースされた、Movable Type 5.13 / 5.07 / 4.38 用の修正パッチを公開します。Movable Type 5.13 / 5.07 / 4.38 でのセキュリティ修正の影響で、特定のサードパーティー製のプラグインを利用している場合に、「Template load error」エラーが発生することがあります。アップグレード後のMovable Typeに、修正パッチを適用することで、このエラーを回避することが可能です。

なお、アップグレード後に「Template load error」エラーが発生していない場合は、本パッチの適用は必要ありません。本パッチは、将来のバージョンに組み込んでリリースされます。

確認された問題

Movable Type 5.13 / 5.07 / 4.38では、プラグインからのテンプレート読み込み時のセキュリティが強化されています。その結果、以前のバージョンのMovable Typeで動作していたプラグインであっても、「Template load error」エラーが発生して利用できない場合があります( FogBugz 107561)。解決方法として、以下の二つのいずれかをおこなってください。

  1. プラグインを修正して、エラーが発生しない実装方法に変更する。修正方法はこちらを参照してください。
  2. Movable Type に修正パッチを適用し、AllowFileInclude 環境変数を設定することで、セキュリティチェックを無効化する。

望ましいのは『1. プラグインの修正』ですが、サードパーティー製のプラグインなどで、すぐに修正できない場合に、『2. 修正パッチの適用』でエラーを回避できます。

問題の対象となるバージョン

以下のバージョンにアップグレードした後に、サードパーティー製のプラグインの利用時に「Template load error」が発生する場合があります。

  • Movable Type Open Source 4.38 / 5.07 / 5.13
  • Movable Type 4.38 / 5.07 / 5.13 (Professional Pack, Community Pack を同梱)
  • Movable Type Advanced 5.07 / 5.13
  • Movable Type Enterprise 4.38

修正パッチの利用方法

修正パッチをダウンロードして、以下の手順でアップグレード済みのMovable Typeに適用してください。

ダウンロード

修正パッチの内容は、Movable Typeのバージョン毎に異なります。利用中のバージョンに応じて、以下のいずれかの修正パッチをダウンロードしてください。

アップロード

ダウンロードしたzipファイルを解凍すると、「Template.pm」というファイルに解凍されます。Movable Type 5.13、5.07、あるいは4.38をインストールしたサーバーの同名のファイルを、この「Template.pm」ファイルで置き換えます。

FTPクライアントなどを利用してサーバーに接続します。Movable Type をインストールしたディレクトリの以下のファイルを、上書する形でアップロードしてください。

lib/MT/Template.pm
    

AllowFileInclude 環境変数を指定

AllowFileInclude 環境変数を指定すると、Movable Type 5.13、5.07、4.38 における MTInclude テンプレートタグ のセキュリティ強化を、無効化します。修正パッチを適用することで、MTInclude テンプレートタグ加えて、プラグインでのload_tmpl関数に関するセキュリティ強化も無効化されます。Movable Typeの設定ファイル(mt-config.cgi)に、以下を記述してください。

AllowFileInclude 1
    

プラグインの動作確認

上記の手順によって、「Template load error」エラーが発生していたプラグインで、エラーが発生しなくなります。

ただし、AllowFileInclude 環境変数を有効にしている場合、テンプレート編集権限のあるユーザーや、プラグインからの任意のファイルの読み込みが可能な状態になるので、できるかぎりプラグインをアップデートして、AllowFileInclude 環境変数を無効にすることを推奨します。

プラグインの修正方法

Movable Type 5.13 / 5.07 / 4.38 において、プラグインで「Template load error」が発生する理由は、以下の二つです。修正方法を参考に、プラグインを修正してください。

load_tmpl ファンクション

プラグインでテンプレートをロードするときに、Movable Typeのインスタンスを利用してload_tmplファンクションを実行すると、プラグインのtmplフォルダのテンプレートを読み出すことができず「Template load error」が発生します。以下のコードは、Movable Type 5.13 / 5.07 / 4.38 では 正しく動作しません

my $plugin = MT->component(PLUGIN_ID);
my $app = MT->instance;
my $tmpl_file = File::Spec->catdir(
   $plugin->{full_path}, 'tmpl', 'template.tmpl'
);
my $tmpl = $app->load_tmpl( $tmpl_file );
    

プラグインのコンポーネントを利用して、load_tmplファンクションを実行することで、正しくテンプレートを読み出すことができます。上記のコードは、以下のように修正します。

my $plugin = MT->component(PLUGIN_ID);
my $tmpl = $plugin->load_tmpl( 'template.tmpl' );
    

load_tmpl で親ディレクトリを指定 (3/5追加)

load_tmple ファンクションで、テンプレートのパスに親ディレクトリ("../")を指定した場合に、「Template load error」が発生します。 この問題を回避するためには、パッチの適用とAllowFileInclude環境変数に1を指定することが必要です。

管理画面の書き換え時のmt:Includeの利用

管理画面を書き換えるプラグインで、mt:Includeタグを画面に差し込むときに、Movable Type 5.13 / 5.07 / 4.38 以降のバージョンでは、かならず component モディファイアを指定する必要があります。以下の記述方法は、正しく動作しません

my $inc = $tmpl->createElement(
   'include',
   { name => 'template.tmpl' }
);
$tmpl->insertBefore( $include, $placeholder );
    

以下のように修正してください。

my $inc = $tmpl->createElement(
   'include',
   {
       name      => 'template.tmpl',
       component => PLUGIN_ID,
   }
);
$tmpl->insertBefore( $include, $placeholder );
    

以上です。

Updated on 2013-09-18, 11:29 .

関連ページ