たとえば、ブログのコメントにHTMLの利用を許可している場合、悪意のあるHTMLやJavaScript、PHPなどをコメント欄から送信し、サーバーでコードを実行させようと考えるかもしれません。これは大変危険な問題です。このようなサイトの脆弱性を狙ったコードはクロスサイトスクリプティング(XSS)と呼ばれることがあります。このような問題からサイトを保護するため、Movable Typeは、訪問者が投稿したすべてのデータ(コメントのデータとトラックバックのデータ)をサニタイズ(無害化)します。
サニタイズ・プロセスでは、一部のHTMLタグだけが機能するようにし、その他のタグ、実行命令およびスクリプティング命令(PHP、JSP、JavaScript)はすべて取り除きます。初期設定で許可されているHTMLのタグとアトリビュート(属性)はa href, b, i, br/, p, strong, em, ul, ol, li, blockquote, preです。この設定は、mt-config.cgiファイルのGlobalSanitizeSpecで変更できます。また、ブログごとに変更したい場合は、ブログの設定で上書きできます。サニタイズ・プロセスの別の機能として、テキストがサニタイズされたあと、開いたままのタグに終了タグを補う機能があります。たとえば、あなたのサイトの訪問者が<b>タグを開き、閉じるのを忘れた場合は、サニタイズ・プロセスが</b>タグを追加します。
以下の説明は、ブログの設定にあるコメントでのHTMLの利用を許可するオプションを有効にしている場合だけに該当します。
初期設定でサニタイズ機能は、以下のタグに対し自動的に有効になります。
これらのタグをセキュリティ上安全にするため、テンプレートを修正する必要はありません。これらのタグのサニタイズを無効にする場合は、以下のように<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="...">...</p>
<blockquote style="...">...</blockquote>
このとき注意することは、許可するタグのリストを1つ1つ列挙する必要があるということです。*は、単にこれらの列挙したタグの中で、指定したアトリビュートを許可するという意味で使われます。