Movable Type Enterprise 1.5 マニュアル: サニタイズ

目次

« 前へ | ホーム | 次へ »

サニタイズ

例えば、ブログのコメントにHTMLの利用を許可している場合、悪意のあるHTMLやJavaScript、PHPなどをコメント欄から送信し、サーバーでコードを実行させようと考えるかもしれません。これは大変危険な問題です。このようなサイトの脆弱性を狙ったコードは「クロスサイトスクリプティング(XSS)」と呼ばれることがあります。このような問題からサイトを保護するため、Movable Type Enterpriseは、訪問者が投稿したすべてのデータ(コメントのデータとトラックバックのデータ)をサニタイズ(無害化)します。

サニタイズ:入力された文字列を安全に

サニタイズ・プロセスでは、一部のHTMLタグだけが機能するようにし、そのほかのタグ、実行命令およびスクリプティング命令(PHP、JSP、JavaScript)はすべて取り除きます。初期設定で許可されているHTMLのタグとアトリビュート(属性)は「a href」「b」「br」「p」「strong」「em」「ul」「li」「blockquote」です。この設定は、「mt-config.cgi」ファイルの「GlobalSanitizeSpec」で変更できます。また、ブログごとに変更したい場合は、ブログの設定で上書きできます。サニタイズ・プロセスの別の機能として、テキストがサニタイズされたあと、開いたままのタグに終了タグを補う機能があります。例えば、あなたのサイトの訪問者が<b>タグを開き、閉じるのを忘れた場合は、サニタイズ・プロセスが</b>タグを追加します。

注意 以下の説明は、ブログの設定にある[コメントでのHTMLの利用を許可する]オプションを有効にしている場合だけに該当します。

初期設定での使用

初期設定でサニタイズ機能は、以下のタグに対し自動的に有効になります。

  • <$MTCommentAuthor$>
  • <$MTCommentEmail$>
  • <$MTCommentURL$>
  • <$MTCommentBody$>
  • <$MTPingTitle$>
  • <$MTPingURL$>
  • <$MTPingBlogName$>
  • <$MTPingExcerpt$>

これらのタグをセキュリティ上安全にするため、テンプレートを修正する必要はありません。これらのタグのサニタイズを無効にする場合は、以下のように<sanitize>アトリビュートに「0」を指定します。

<$MTPingTitle sanitize="0"$>

この領域に精通していない方には、初期設定のままにしておくことをお勧めします。

初期設定を上書きしたい場合

初期設定のサニタイズ仕様を上書きするには、まずその理由を明確にし、上書きが本当に必要であるかどうかを確かめてください。さらに、ここに説明するサニタイズ仕様のフォーマットを確実に理解してから上書きしてください。

サニタイズ仕様はHTMLタグ名がカンマ(,)で区切られたものです。各タグに対しあなたが許可するアトリビュートをスペースで区切り列挙します。以下に例をあげます。

例:<a>タグとそのhrefアトリビュート、そして<b>タグを許可したものです。
a href,b
これは<p>タグと<br>タグを許可したものです。
p,br/

上の例にある「br/」タグの「/」に注目してください。これがないと、サニタイズ・プロセス時に、テキストを解析するパーサーが、<br>タグだけを見つけた場合、テキストの最後に終了タグを付ける必要があると判断します。しかし、タグ名のあとに「/」を加えておけば、パーサーはそのタグには終了タグが必要ないと判断します。 許可するタグのアトリビュートは1つ1つ指定する必要があります。指定しないと、アトリビュートはどれも許可されない状態になります。例えば、<a>タグを許可した場合は、<href>アトリビュートも許可するのが賢明です。そのようにしておかないと、

<a href="http://www.example.com/">

というHTMLコードは、上書きしたサニタイズ機能によって、以下のようになってしまいます。

<a>

これではハイパーリンクが機能しません。

複数のHTMLタグに共通する1つのアトリビュートを許可する場合は、タグ名に「*」を用いたあと、そのアトリビュート名を記述します。以下に例をあげます。

br/,p,blockquote,* style

この設定は、以下のHTMLコードを許可します。

<br style="..." />
<p style="..." />
<blockquote style="...">...</blockquote>

このとき注意することは、許可する「タグ」のリストを1つ1つ列挙する必要があるということです。「*」は、単にこれらの列挙したタグの中で、指定した「アトリビュートを許可する」という意味で使われます。


Copyright © 2001-2006 Six Apart, Ltd. All Rights Reserved.
« 前へ | ホーム | 次へ »