直近には、これ。
http://blog.livedoor.jp/dankogai/archives/50979976.html
入力を検証せよ(Validate input) - 信頼なきデータソースからの入力は、全て検証するようにしましょう。適切な入力検証は、大部分のソフトウェア脆弱性を取り除きます。外部データは疑って掛かりましょう。これらにはコマンドライン引数、ネットワークインターフェース、環境変数、そしてユーザーの管理下にあるファイルが含まれます [Seacord 05]。
んと………なぜ?
或いは「検証って具体的にはなにをどうするの?」 ← 多分一番疑問なのはここ。
いわゆる「悪意あるデータ」については
他のシステムに送るデータは消毒(サニタイズ)しておけ(Sanitize data sent to other systems) - サブシステムに送るデータは、消毒しておきましょう[C STR02-A]。コマンドシェルやリレーショナルデータベースや商用のコンポーネント(COTS)などが相当します。攻撃者は、SQLやコマンドなど、インジェクションを用いてこれらのサブシステムを攻撃することが出来ます。これは入力検証の問題に限りません。なぜならそこで呼び出されるサブシステムが、何のためにそのコンテキストが呼び出されるか理解しているとは限らないからです。コンテキストの解釈は呼び出し側が担っている以上、データを消毒しておく責任も呼び出し側のシステムにあります。
これで足りるんじゃないの? と思ってしまうんですがどんなもんなんでしょ?
結構あちこちで絶賛されてるだけに…正直、山盛り疑問です。
とりあえず…コメントでの突っ込みに期待、かな?