XSS - 表示系パラメータに存在する盲点


ぼくはまちちゃん!で有名なはまちや2さんのエントリ、XSS - 表示系パラメータに存在する盲点を見て。

そもそもWebアプリケーションにおいて、表示系だとかユーザからの入力で云々だとか、そんなこととは関係なくシステムが扱う外部からの入力では、かつ出力に影響する部分ではすべからくスクリプトの無効化を行うべきでしょう。パラメータ然り、HTTPヘッダ然り。改行コードを削除して、>・<・'・"・&・スペースは全部エスケープ。コーディングする人は「それが実際にエスケープする必要があるのかどうか」は考えなくていいようにするべきだ。

たとえばどう考えても数値しか取らない変数hogeと、何が入ってくるのかわからない変数mogeがあったとして、それを出力するときにmogeだけをエスケープするのは間違っている。hogeもmogeも同じように処理するのが正しい。なぜならhogeが数値しか取らないことを確認するためには、ソースコードの他の部分を参照して確認する必要があるからだ。そんなのは時間の無駄。そこだけを見て問題ないことが確認できるようにしておくべき。もちろんエスケープすると想定の動作をしないこともあるわけだが、そんなことは例外。どうしてもタグを出力したいとかいうときだけ、例外的に特定のタグだけ許すようにするべき。

なんでそういうことをちゃんと書いてあるセキュリティ関係の本ってないのかな。あるけど俺が知らないだけ?