2014年03月28日
PowerCMSの管理画面をHTTPSで利用する
CMS で扱う URL に関連した問題とその解決方法はいくつかあります。ここではその助けとなりそうなプラグインや環境変数、テンプレート記述について説明します。
いずれの方法もサイト構築の初期段階から導入しておき、表示確認しておくことが重要です。公開・運用開始後の CMS やサイトに対して途中からパスの変更をする場合は、完全な複製環境を用意して十分慎重に検証することをお勧めします。また HTTPS での CMS 利用を前提とした場合、基本的には1つの CMS で複数ドメインの複数サイトを管理することは難しくなります。
管理画面で読み込まれる URL を HTTPS URL に置換する
通信の盗聴や情報の改ざん、なりすましの危険を回避するために CMS の管理画面を HTTPS 経由で使用する場合、セキュリティを維持するためには管理画面の HTML から副次的に読み込まれる画像ファイルや JavaScript ファイル、CSS ファイルなどをすべて HTTPS 経由で読み込む必要があります。
一方で、CMS を使って構築するサイトの公開 URL は HTTPS ではなく HTTP URL である、というのがまだまだ一般的です。その場合、HTTPS の記事編集画面やアイテムの一覧画面の HTML では、HTTP URL のサイトに使用するための画像アイテムやそのサムネイル画像が HTTP URL のまま Web ブラウザに返されてしまいます。Web ブラウザはセキュリティを保つため、それら HTTP URL の読み込みを制限してエラーを起こし、管理画面に画像を表示しません。このエラーを回避するため Web ブラウザ側の設定を緩めるなどしてしまうと、それは結果としてセキュリティに穴をあけることとなり、本末転倒です。
SSL プラグイン
PowerCMS 4.02 以降には追加オプションプラグイン「SSL プラグイン」が同梱されています。直接 SSL を扱うかのように誤解を招きそうなプラグイン名ですが、実際にはこのプラグインによって、PowerCMS の管理画面を HTTPS 経由で利用する場合に必要となるいくつかの処理が追加されます。どの処理も既定では無効化されているので、環境設定ファイル mt-config.cgi
で環境変数を追加して、環境に応じ必要な機能を有効化します。
環境変数「AssetURL2HTTPS
」を「1
」に設定すると、記事編集画面のリッチテキストエディタ上でプレビュー表示される画像や、アイテムの一覧・編集画面で表示される画像アイテムのサムネイル等について、それらの HTTP URL のスキーム名を「https」に置き換えます。置換するのはスキーム名のみで、URL のホスト・ドメイン名以降については置換しないため、前提として HTTPS の管理画面とウェブサイトでいわゆるドキュメントルートが同じであるか、または HTTPS の管理画面用ドメインでも同じパスで公開ウェブサイトの画像ファイルを配信するように、Web サーバーを設定する必要があります。例えば管理画面 CGI の URL が「https://cms.example.com/app/mt.cgi
」でウェブサイト URL が「http://www.example.jp/
」、画像アイテムの URL が「http://www.example.jp/img/photo.jpg
」の場合は、「https://cms.example.com/img/photo.jpg
」 でも同じ画像ファイルを取得できるように Web サーバーを設定します。Apache HTTP サーバーではサーバー環境や構成に応じて mod_proxy モジュールや mod_alias モジュール、mod_rewrite モジュールが有効です。
環境変数「AssetURL2HTTPSMethods
」では、カンマ区切りで URL 置換処理の対象とするアプリケーションのモード (/mt.cgi?__mode=...
) を追加することができます。通常、追加設定することはありません。
環境変数「DisabledBlogStats
」を「1
」に設定すると、PowerCMS 3.2 以前の管理画面でダッシュボードのウィジェット「Blog Stats」を無効化します。PowerCMS 3.2 (Movable Type 5.2) 以前では、ダッシュボードのウィジェット「Blog Stats」で Adobe Flash による時間軸のスライダーグラフが表示されますが、このスライダーグラフは HTTPS の管理画面に対応できないため、このウィジェットごと無効化します。なお、PowerCMS 4 (Movable Type 6) 以降、同ウィジェットは Flash を使用しない新しいウィジェット「サイト情報」(Site Stats) で置き換えられたので、この環境変数を設定する必要はなく、HTTPS のダッシュボードでもサイト情報のウィジェットを利用することができます。
環境変数「InsertURL2HTTPS
」を「1
」に設定すると、種類が「アイテム」や「画像」のカスタムフィールドで画像アイテムを選択した後に管理画面上で挿入されるプレビュー用 HTML で、img
要素の src
属性値 URL (<img src="http... ">
) を、HTTP URL に置き換えます。通常使用することはありません。
環境変数「PreviewInNewWindow
」
PowerCMS 4 (MT 6) 以降では環境変数「PreviewInNewWindow
」を「1
」に設定することで、編集画面から [プレビュー] ボタンを押してプレビューするときに、プレビュー用の HTML ファイルを従来のプレビュー画面内のインラインフレーム (<iframe>
) により読み込んでプレビュー表示するのではなく、プレビュー画面に遷移せず編集画面から新しいウィンドウで開いてプレビュー表示するようにプレビュー動作を変更できます。
これは HTTPS のプレビュー画面にインラインフレームで HTTP URL のプレビュー用 HTML ファイルを読み込もうとして、Web ブラウザのセキュリティ制限によりプレビューすることができなくなってしまう問題を回避するのに有効です。HTTPS の管理画面から、新しいウィンドウで HTTP URL のサイトのプレビュー用 HTML ファイルを開いて、より公開サイトに近い条件でプレビューできます。
環境変数「LocalPreviews
」
環境変数「LocalPreviews
」を「1
」に設定することで、プレビュー用の HTML ファイルに出力されるウェブサイト・ブログの公開 URL は CMS のプレビュー画面と同じスキーム名とドメイン名の URL に置き換えられます。
例えばブログの公開 URL が「http://www.example.jp/blog/
」で CMS の URL が「https://cms.example.com/apps/mt.cgi
」の場合、プレビュー用 HTML ファイルに出力される画像ファイルなどの URL はすべて「http://www.example.jp/blog/img/file.png
」から「https://cms.example.com/blog/img/file.png
」に置き換えられます。これを利用して、置き換え後の URL でも同じようにファイルが取得できるよう HTTP サーバーのドキュメントルートなどをうまく調整すれば、HTTPS の管理画面から HTTP URL のコンテンツをプレビューすることができます。
また、編集画面から [プレビュー] ボタンを押してプレビューするときに、プレビュー画面内のインラインフレームに指定されて読み込むプレビュー用の HTML ファイルのパス (<iframe src="...">
) も同様に変更されるので、 HTTPS のプレビュー画面にインラインフレームでプレビュー用 HTML ファイルの HTTP URL を読み込もうとしてしまう問題を回避することができます。
ただし、プレビューするサイトのコンテンツは HTTPS で表示されることを考慮していないことが多いので、主に SNS 用の JavaScript によるウィジェットなどが HTTPS のセキュリティ制限によってエラーとなります。この場合はプレビューによる再構築なのかどうかを判断するためにテンプレート変数「preview_template
」などを利用して、プレビュー表示では不要だったり都合が悪かったりするウィジェット類を読み込まないようにして回避します。
<MTUnless name="preview_template">
<script src=" (...HTTPS のセキュリティ制限によってエラーとなってしまう JavaScript ウィジェット)
</MTUnless>
コメントを投稿する