2006年1月5日(木曜日)
サニタイズ言うなキャンペーンがわかりにくい理由
- 「サニタイズ言うなキャンペーン」とは何か (takagi-hiromitsu.jp)
- 要約版:「サニタイズ言うなキャンペーン」とは (takagi-hiromitsu.jp)
個人的には、「サニタイズ言うなキャンペーン」がわかりにくくなっている最大の要因は、「サニタイズと言うな」という語の多義性にあるのではないかと思います。私は最初にこの話を見たとき、これを「サニタイズという言葉を使うな」と解釈して、以下のような主張なのではないかと予想しました。
- とある概念を、「サニタイズ」と呼んではならない
- 「サニタイズ」という言葉を使うのではなく、別のもっと適切な言い方をすべきである
しかし、「「サニタイズ言うなキャンペーン」とは何か (takagi-hiromitsu.jp)」の議論を見ると、これはむしろ以下のような話であるように思えます。
- きちんとしたプログラミングの手法をとれば、プログラマが「サニタイズ」ということを意識しなくても、脆弱性のないプログラムが作れる
- むやみに「サニタイズせよ」と言うのではなく、そもそもサニタイズが必要ない手法を採るべき
これは「サニタイズという言葉を使うな」という主張ではありません。「そもそもサニタイズしなくて済むようにすべきだ」という主張です。言い方を変えると、「サニタイズせよと言うな」という主張になります。
「サニタイズという言葉を使うな」と「サニタイズせよと言うな」は似ているようですが、実はかなり違うことを言っています。前者の主張は、まさに「サニタイズ」という語を他の語に言い換えろという主張です。しかし後者の主張は、「サニタイズ」という語を他の語に言い換えれば良いという話ではありません。言葉を換えたとしても、結局プログラマがそれを意識しなくてはならないのでは、後者の解決にはならないのです。
そしてさらにもう一つ、
- とある概念を総称して「サニタイズ」と呼ぶことには弊害がある
- 総称せずに、個別に称するべきである
という議論もあるようです。これもまた違う話になるはずで、これらをすべてひっくるめて、「サニタイズと言うな」と称してしまっていることが混乱を招いているのではないでしょうか。
……なお、個人的には「サニタイズせよと言うな」という主張にはかなり共感できます。この日記を処理している hatomaru.dll というプログラムでは、HTML の出力をサニタイズする処理を一切書いていません。すべてが DOM で処理されている (そして InnerXml に値を直接セットしないと決めている) ので、サニタイズを意識する必要がないのです。これは非常に気が楽でした。
ただし、hatomaru.dll にもサニタイズのルーチンはあります。たとえば、http://bakera.jp/hatomaru.aspx/ebi という URL の /ebi 部分はパス名として処理されるようになっていて、データディレクトリの中の /ebi/ ディレクトリにあるファイルを見に行くようになっています。ここで ../ などを許してしまうと、サーバ内の任意の XML ファイルが読まれてしまうおそれがありますので、これは意識的に「サニタイズ」しています。
このような、いわゆるパス名パラメータを「サニタイズ」しなくて済めば気が楽なのですが、ファイルを開くところで一律処理しようとすると、今度は内部の設定ファイルに書かれたパスをうまく処理できないという問題が出てきます。
- 設定ファイルに書かれたものや、管理者の入力したものに関しては任意のパスの指定を許す
- 外部からの入力では任意のパスの指定を許さない
という必要があるので、状況に応じて危険な文字を削除したり(あるいは安全な文字だけを許可したり)、逆にそのまま使ったりしなければなりません。つまりは意識的に「サニタイズ」しなければならないということだと思うのですが……。これを「サニタイズせよ」と言わなくて済むような解決策ってあるのでしょうか。
- 「サニタイズ言うなキャンペーンがわかりにくい理由」へのコメント (15件)
- 前(古い): 2006年1月1日(Sunday)のえび日記
- 次(新しい): 2006年1月6日(Friday)のえび日記