「出力をホワイトリストで処理することを真剣に考えてみる」へのコメント
「水無月ばけらのえび日記 : 出力をホワイトリストで処理することを真剣に考えてみる」について、8件のコメントが書かれています。
[5035] Re: 「出力をホワイトリストで処理することを真剣に考えてみる」
sanaki (2008年10月6日 13時31分)
これは金床さんの「ウェブアプリケーションセキュリティ」P72 の "過剰なエスケープ" というものですね。
話変わって、
「なんでもエスケープしとけ、念のため」という考え方を突き詰めていくと「0-9A-Z」をなぜ文字実態参照しない?
という事にはなりますね。
そもそも論として、
"[ホワイト|ブラック]リスト" という言葉を出力時に持ち込むのはどうか、と思いました。
タブーをなくすために議論する、という目的であれば、有効だとは思いますが。
[5037] Re: 「出力をホワイトリストで処理することを真剣に考えてみる」
ばけら (2008年10月6日 14時43分)
>「なんでもエスケープしとけ、念のため」という考え方を突き詰めていくと「0-9A-Z」をなぜ文字実態参照しない?
>という事にはなりますね。
そうですね。それらも文字参照にしてしまっても問題ないと思います。
が、そうするとホワイトリストの出番がなくなってしまいますので。:-)
# 元々、「出力にホワイトリストっていうのはどういうことだろう?」というところからスタートした思考実験ですので、「ホワイトリストを使う」という前提で調整しています。
[5039] Re: 「出力をホワイトリストで処理することを真剣に考えてみる」
りゅう (2008年10月6日 15時31分)
せっかくなので私も真剣に考えてみました。以下本文。
ホワイトリストによるフィルタリングというのは、ソフトウェアが扱う値を動作保障されている範囲に限定することによって、想定外の挙動が起こることを防ぐというものです。したがってホワイトリストに含まれるものは、なんらかの方法によって動作保障がなされているものである必要があります。そうでないものはすべて「グレー」で、ホワイトリストに含めるべきものではありません。
注釈に「ASCII非互換でものすごく変な文字符号化方式があったりしたら分かりませんが……」とある通り、そのホワイトリストでは想定外の挙動が起こらないことが保障できていません。したがって [0-9a-zA-Z] は「グレー」で、「白」ではない以上ホワイトリストに含めることは適切ではありません。ということでホワイトリストには何も含まれなくなり、すべての文字をエスケープすることになるわけですが、それで想定外の挙動は起こらないと保証できるでしょうか。できないはずです。なぜなら問題を起こすのは自分が作成したソフトウェアではないからです。
ウェブアプリケーションが出力したデータで問題を起こすのは、データを受け取った側のソフトウェアで、ほとんどの場合それは他人が作成したものです。他人が作成したソフトウェアの動作を保障することはできないため、出力のホワイトリストというものを作成するということができません。作ったとしてもそれは出力側が勝手に考えた「白」っぽいリストというだけであって、受け手側のホワイトリストである保障はありません。したがって出力をホワイトリストで処理するということに意味は無いということになります。
[5043] Re: 「出力をホワイトリストで処理することを真剣に考えてみる」
sanaki (2008年10月7日 21時13分)
>そうするとホワイトリストの出番がなくなってしまいますので。:-)
確かに ... :-) もしかして、地雷を踏んでしまったかな!? m(_ _)m
[5044] Re: 「出力をホワイトリストで処理することを真剣に考えてみる」
えむけい (2008年10月7日 23時33分)
> 注釈に「ASCII非互換でものすごく変な文字符号化方式があったりしたら分かりませんが……」とある通り、そのホワイトリストでは想定外の挙動が起こらないことが保障できていません。
しっかり実例もあるようです。
[5045] Re: 「出力をホワイトリストで処理することを真剣に考えてみる」
(名前を入力してください) (2008年10月8日 9時5分)
>とは言っても、無条件にオススメしたりはしませんし、私も今のところ実践するつもりはないのですが。
このやり方が、なぜオススメできない感じなのか、実践しない感じなのか、
その理由が明らかになるといいと思います。
仕様に基づいたことなのか、たまたま解決する他の問題を気にしなくなることがかえって将来のリスクにつながらないか、
とかそんな感じでしょうか。
[5046] Re: 「出力をホワイトリストで処理することを真剣に考えてみる」
りゅう (2008年10月8日 14時35分)
>しっかり実例もあるようです。
これですか。
http://www.massangeana.com/mas/charsets/cjk-c.htm
> 行の始めが "zW" (7A 57) で始まっていると, そこから行末までを GB だとみなします。実際には改行は無視されます。 GB の後の改行を無視されたくない場合は行末に "#" (23)をつけます。その他, GB 行の途中に 1文字だけ ASCII を使いたいときは, たとえば "?" (3F) なら " ?" (20 3F) のように頭にスペースをつければよいなど, いくつかの工夫があります。
かなり古いエンコーディングのようで、さすがにウェブブラウザは対応していないようですが、iconvがさりげなく対応しているようです。
[5048] Re: 「出力をホワイトリストで処理することを真剣に考えてみる」
ばけら (2008年10月10日 18時37分)
>>とは言っても、無条件にオススメしたりはしませんし、私も今のところ実践するつもりはないのですが。
>このやり方が、なぜオススメできない感じなのか、実践しない感じなのか、
>その理由が明らかになるといいと思います。
「無条件にオススメしたりはしない」と言っているのは、「変換処理が重くなるかもしれない」「実装が面倒かもしれない」「結果出力されるデータのサイズが大きくなる」といったデメリットがあるからです。そういったデメリットが気になる場合は採用したくないこともあるでしょう。
また、これはまだ思考実験の段階なので、他にもデメリットがあるかもしれませんし、メリットも実は小さいのかもしれません。
実践しないと言っているのは、単に私が基本的に「全部DOM」派だからです。DOM操作だけでXHTMLを作る場合、文字参照への変換は出力時に自動的に行われてしまいますので、このような処理を書く余地がありません。
「水無月ばけらのえび日記 : 出力をホワイトリストで処理することを真剣に考えてみる」についてコメントを書く場合は、以下のフォームに記入してください。