📃

Movable Typeのセキュリティ対策

2024/11/15に公開

概要

MTを設置する際に施すセキュリティ対策について、筆者が実施しているもの、または実施できる環境であれば可能な範囲で実施を検討できるとよいと思うものをつらつらと書いています。

なお、この記事の内容はMT8およびオンプレミスで運用する前提のものです。
すこしでも参考になりましたら幸いです。

セキュリティ対策ガイドの項目

MTでサイトを運用するにあたり、セキュリティ対策についてはMTのドキュメントサイトのセキュリティ対策ガイドの項目を中心に実施します。
以下はセキュリティ対策ガイドで触れられている項目のいくつかに対して、補足的に書いています。

最新のMovable Typeを利用する

年間メンテナンスライセンスを通じて提供される最新版のMTを常時利用するようにします。といっても最新版のリリース後に即時反映というのは、実際に運用するサイトではなかなか難しいので、リリースされてから適用までの期間をあらかじめ決めておくとよいと思います。

2024年11月1日にMT7はEOM(1年後にEOL)を迎えたため、MT8へのアップデートを推奨します。

管理画面にBASIC認証をかける

MTの管理画面へのログインとは別に、管理画面へのアクセスにBASIC認証を用いることを検討します。
社内など特定のネットワークからしかアクセスしないのであれば、BASIC認証の代わりにIPアドレス制限を導入する方が、ログインの手間が省けるのでよいかもしれません(管理画面ログイン前に入力が煩わしいなどで、BASIC認証が忌諱されることもそれなりに…)

ロックアウトを設定する

初期設定では以下いずれかの条件で、30分間アカウントにロック(サインイン拒否)がかかります。

  • 30分以内に6回以上同一ユーザーがパスワードを間違える
  • 30分以内に10回以上同一IPアドレスからのサインインに失敗した場合

設定の変更はシステムメニューの全般設定「アカウントロックの設定」から。
初期値よりもすこし期間と回数を少なめにすることをオススメします。

mt-configで設定できるもの

セキュリティ対策ガイドにも記載のある、mt-config.cgiに環境変数を設定して実施するものについて。

CGIスクリプト名を変更する

スクリプトのファイル名を変更しただけではMTそのものが動作不良となるため、必ず環境変数も変更します。
ファイル名はなるべくそれぞれの機能を推測されにくいものを設定するとよいです。

AdminScript

管理スクリプトmt.cgiの名称を変更する。

AdminScript xxx.cgi

UpgradeScript

アップグレード用スクリプトmt-upgrade.cgiの名称を変更する。

UpgradeScript xxx.cgi

CommentScript

コメント投稿用スクリプトmt-comments.cgiの名称を変更する。

CommentScript xxx.cgi

DataAPIScript

Movable Type Data APIのアクセス用スクリプトmt-data-api.cgiの名称を変更する。

DataAPIScript xxx.cgi

CheckScript

MTをインストールする環境のシステム情報確認用スクリプトmt-check.cgiの名称を変更する。

CheckScript xxx.cgi

CheckScript

MTをインストールする環境のシステム情報確認用スクリプトmt-check.cgiの名称を変更する。

CheckScript xxx.cgi

SearchScript

検索用スクリプトmt-search.cgiの名称を変更する。

SearchScript xxx.cgi

使わないCGIスクリプトの権限を変える

使用しないCGIスクリプトは削除あるいは実行権限をなくしておきます。

インストールまたはアップデート後に削除するもの

  • mt-config.cgi-original
  • mt-wizard.cgi
  • mt-testbg.cgi(MT7以前)
  • mt-xmlrpc.cgi(MT7以前 / 以下補足項目参照)

実行権限をなくしておくといいもの

筆者の場合、下記2ファイルは運用時は基本的に実行権限をなくしていて、プラグインのアップデートなどで必要なときに実行権限を付与する形にしています。

  • mt-check.cgi(サーバー環境のシステム情報確認)
  • mt-upgrade.cgi

また、以下は必要に応じて実行権限をなくします。あるいは削除してしまっても問題ないものです。

  • mt-cdsearch.cgi(コンテンツデータ専用の検索)
  • mt-comments.cgi
  • mt-data-api.cgi
  • mt-search.cgi
  • mt-atom.cgi(MT7以前)
  • mt-feed.cgi(MT7以前)
  • mt-ftsearch.cgi(MT7以前 / MySQLのFULLTEXTインデックスを利用した検索)
  • mt-tb.cgi(MT7以前)

筆者は個人で使用しているMTに関しては、mt-data-api.cgi以外を削除しています。

ディレクトリファイル名

MTのプログラムを置くディレクトリも/mt以外の名称(MTを想起させないもの)に変更しておくことをオススメします。

Data APIの設定

Movable Type Data APIを利用する場合は、公式リファレンスをもとに環境変数を設定しておきます。
以下はとくに設定しておくとよい環境変数を記載しています。

  • DataAPICORSAllowOrigin
  • DisableResourceField
  • DataAPIDisableSite
    • システム管理者とは別にブログやウェブサイト管理者が存在する場合、設定しておくとよいと思います

コメント投稿まわり

記事に対するコメントを許可する場合は、コメント本文に使用できるタグを制限するなどしておきます。

コメント投稿の設定

各サイトの左メニュー「設定」>「コミュニケーション」のコメントポリシー(コメントを許可すると表示される)の項目。

HTMLを許可

許可する場合はチェックを入れて、「HTMLタグを制限」で許可するHTMLタグを設定します。許可する場合は利用できるHTMLタグを補足的に記載しておくと親切です。
コメント本文に入力されたURLは自動的にリンクが貼られ、改行はMTCommentBodynl2br="1"モディファイアを指定することで実装できるので、特別な理由がなければ基本的にHTMLは許可しないでよいかと思います。

HTMLタグを制限

HTMLを許可する場合は、許可するHTMLタグを指定します。なお、URLは自動的にリンクが貼られるので、URLのリンクを無効にする場合は、後述するようにテンプレートでグローバルモディファイアを付与する必要があります。

メール通知

有効にすると、記事の作成者(承認制を導入している場合は、その記事の最終保持者)のアカウントに設定したメールアドレス宛に通知が来ます。大量のコメントでメールボックスが埋まってしまって困る…ということでもなければ、基本的に有効にしておくことをオススメします。

テンプレートを修正する

コメント本文にHTMLタグを許可しない場合は、念のためMTCommentBodyに下記いずれかのグローバルモディファイアを付与して、エスケープ処理をしておくと良いです(不注意で設定を変更してしまうというような人為的ミスは無きにしも非ずなので…)

  • encode_html="1" : HTMLタグをエスケープ処理して出力する
  • remove_html="1" : HTMLタグを除去して出力する

なお、コメント本文にHTMLタグを許可した場合、上記を付与するとエスケープ処理されてしまうため注意が必要です。
また、sanitize="1"を付与すると、HTMLタグを可する・しないにかかわらず、sanitizeの指定が優先されます。

公式リファレンス

Discussion