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