Movable Type 3.2 マニュアル - サニタイズ: 入力された文字を安全に

« 目次


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

注:以下の説明は、ブログの設定にある「 コメントでの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="...">

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


Copyright © 2001-2005 Six Apart, Ltd. All Rights Reserved.