反応に反応を重ねるうち、どんどん論点が見えなくなってしまっているような気がします。重要なことはこのあたりかな。
- 処理内容を理解し、その入力と出力が何であるべきかを理解する。
- 処理内容が多岐にわたる以上、アプリケーションの入り口での一括処理*1という概念はふさわしくない。
- 「サニタイズ」という言葉はもはや曖昧で工学的ではないので使わないべき。特に、出力段階での処理と入力段階での処理を同じ言葉、しかも「消毒」のような概念的な用語では誤解が生じやすい。
というわけで、思考停止を招く「サニタイズ脳の恐怖」というわけですね。
後半のPerlのくだりは蛇足だと思いました。Perlのtaint modeというネーミングをあげつらうよりは、汚染と消毒というのは「未処理の入力値」と「出力に適するように処理」することに名前を付けたのであって、高木さんが「入力段階で一括でだめそうな文字を処理する」ことを元来のサニタイズと定義しているのと大差ないです。
もっとも、最近は出力方法に合わせた処理は出力を担当するモジュールに任せてしまうので、アプリケーションのビジネスロジックの部分では「もっとも素のデータ」だけを扱うことがほとんどなのではないかと思ったりもします。以前書いた書いたとおり、「正しい対策」というのはなかなか難しい
ような部分は、よく目が通されたCPANモジュールを利用するわけですね。セキュリティの基本方針の一つは、「素人考え厳禁」。