水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > 2006年のえび日記 > 2006年1月 > 2006年1月5日(木曜日)

2006年1月5日(木曜日)

サニタイズ言うなキャンペーンがわかりにくい理由

個人的には、「サニタイズ言うなキャンペーン」がわかりにくくなっている最大の要因は、「サニタイズと言うな」という語の多義性にあるのではないかと思います。私は最初にこの話を見たとき、これを「サニタイズという言葉を使うな」と解釈して、以下のような主張なのではないかと予想しました。

しかし、「「サニタイズ言うなキャンペーン」とは何か (takagi-hiromitsu.jp)」の議論を見ると、これはむしろ以下のような話であるように思えます。

これは「サニタイズという言葉を使うな」という主張ではありません。「そもそもサニタイズしなくて済むようにすべきだ」という主張です。言い方を変えると、「サニタイズせよと言うな」という主張になります。

「サニタイズという言葉を使うな」と「サニタイズせよと言うな」は似ているようですが、実はかなり違うことを言っています。前者の主張は、まさに「サニタイズ」という語を他の語に言い換えろという主張です。しかし後者の主張は、「サニタイズ」という語を他の語に言い換えれば良いという話ではありません。言葉を換えたとしても、結局プログラマがそれを意識しなくてはならないのでは、後者の解決にはならないのです。

そしてさらにもう一つ、

という議論もあるようです。これもまた違う話になるはずで、これらをすべてひっくるめて、「サニタイズと言うな」と称してしまっていることが混乱を招いているのではないでしょうか。

……なお、個人的には「サニタイズせよと言うな」という主張にはかなり共感できます。この日記を処理している hatomaru.dll というプログラムでは、HTML の出力をサニタイズする処理を一切書いていません。すべてが DOM で処理されている (そして InnerXml に値を直接セットしないと決めている) ので、サニタイズを意識する必要がないのです。これは非常に気が楽でした。

ただし、hatomaru.dll にもサニタイズのルーチンはあります。たとえば、http://bakera.jp/hatomaru.aspx/ebi という URL の /ebi 部分はパス名として処理されるようになっていて、データディレクトリの中の /ebi/ ディレクトリにあるファイルを見に行くようになっています。ここで ../ などを許してしまうと、サーバ内の任意の XML ファイルが読まれてしまうおそれがありますので、これは意識的に「サニタイズ」しています。

このような、いわゆるパス名パラメータを「サニタイズ」しなくて済めば気が楽なのですが、ファイルを開くところで一律処理しようとすると、今度は内部の設定ファイルに書かれたパスをうまく処理できないという問題が出てきます。

という必要があるので、状況に応じて危険な文字を削除したり(あるいは安全な文字だけを許可したり)、逆にそのまま使ったりしなければなりません。つまりは意識的に「サニタイズ」しなければならないということだと思うのですが……。これを「サニタイズせよ」と言わなくて済むような解決策ってあるのでしょうか。

関連する話題: セキュリティ / サニタイズ言うな

最近の日記

関わった本など