注:以下の説明は、ウェブログの設定にある「コメントでのHTMLの利用を許可する」オプションをオンにしている場合だけに該当します。
訪問者があなたのサイトに提出したデータは、必ずしも常に信頼できるとは限りません。 たとえば、コメントでのHTMLを許可している場合、あなたのサイトの訪問者は、悪意のあるHTMLやJavaScriptのスクリプトやPHPを提出し、あなたのサイトでコードを実行しようとするかもしれません。 このコードは、クッキーの読み取りから、サーバーにある私的なファイルの読み取りに到る、あらゆることを引き起こしかねません。
あなたのサイトを保護するため、Movable Typeは、訪問者が投稿したすべてのデータを無害化(サニタイズ)します。 この中にはコメント・データとトラックバックのデータが含まれます。 この無害化は、サイトのセキュリティを脅かす可能性があるコード(HTMLその他)を削除することによります。 サニタイズ・プロセスでは、一部のHTMLタグだけが機能するようにし、そのほかのタグ、実行命令およびスクリプティング命令(PHP、JSP、JavaScript)はすべて取り除きます。
デフォルトで許可されているHTMLのタグとアトリビュート(属性)はa href
、b
、br
、p
、strong
、em
、ul
、li
、およびblockquote
です。 この設定は、mt.cfgファイルのGlobalSanitizeSpec設定を変更して全体的に上書きできます。また、ウェブログごとに変更したい場合は、ウェブログの設定で上書きできます。 注:この領域に精通していない方には、デフォルト設定のままにしておくことを推奨します。
サニタイズ・プロセスの別の機能として、テキストがサニタイズされた後、開いたままのタグに終了タグを補う機能があります。 たとえば、あなたのサイトの訪問者が<b>
タグを開き、閉じるのを忘れた場合は、サニタイズ・プロセスが</b>
を追加します。
デフォルト(標準)でサニタイズ機能は、以下のタグに対し自動的に有効になります。
<$MTCommentAuthor$>
<$MTCommentEmail$>
<$MTCommentURL$>
<$MTCommentBody$>
<$MTPingTitle$>
<$MTPingURL$>
<$MTPingBlogName$>
<$MTPingExcerpt$>
これは、以上のタグをセキュリティ上安全にするため、テンプレートを修正しなくてもよいことを意味します。 これらのタグのサニタイズを無効にする場合は、sanitizeアトリビュートを使います。
<$MTPingTitle sanitize="0"$>
デフォルト(標準)のサニタイズ仕様を上書きするには、まずその理由を明確にし、上書きが本当に必要であるかどうかを確かめてください。 さらに、ここに説明するサニタイズ仕様のフォーマットを確実に理解してから上書きするようにしてください。
サニタイズ仕様はHTMLタグ名がコンマで区切られたものです。 各タグに対しあなたが許可するアトリビュートをスペースで区切り列挙します。 以下に例を挙げます。
これは、a
タグとそのhref
アトリビュート、そしてb
タグを許可したものです。
a href,b
これは、p
タグとbr
タグを許可したものです。
p,br/
上の例にあるbr/
タグの/
に注目してください。 これは、上述のタグを閉じる機能のために必要です。これがないと、サニタイズ・プロセス時に、テキストを解析するパーサーが、<br>
タグだけを見つけた場合、テキストの最後に終了タグを付ける必要があると判断します。 しかしタグ名の後に/
を加えると、パーサーはそのタグには終了タグが必要ないと判断します。
あなたが許可するタグのアトリビュートは一つ一つ指定する必要があります。指定しないと、アトリビュートはどれも許可されない状態になります。 たとえば、a
タグを許可した場合は、href
アトリビュートも許可するのが賢明です。さもないと、
<a href="http://www.foo.com/">
というHTMLコードは、上書きしたサニタイズ機能によって、以下のようになってしまいます。
<a>
これはおそらくあなたが望んだものではないことでしょう。
複数のHTMLタグに共通する1つのアトリビュートを許可する場合は、タグ名に*
を用いた後、そのアトリビュート名を記述します。 以下に例を挙げます。
br/,p,blockquote,* style
この設定は、以下のHTMLコードを許可します。
<br style="..." /> <p style="..." /> <blockquote style="...">
このとき注意するのは、許可するタグのリストを一つ一つ列挙する必要があるということです。*
は、単にこれらの列挙したタグの中で、指定したアトリビュートを許可するという意味で使われます。