古い記事ですが、いろいろとたどっていて見つけて、目からうろこでした。
「サニタイズ言うなキャンペーン」とは何か(高木浩光@自宅の日記)
PHP のスクリプトで、出力の際に htmlspecialchars 関数を通していないサンプルスクリプトを例に出し、以下のように仰ってます。
たしかにこれは脆弱性ではない。プログラムの全体を精査すれば、「$row['id']」の値が数値しかとらないことを確認できるだろうし、「$row['postdate']」の値が日付を表す文字列しかとらず、HTTPリクエストの値(CGI入力)に依存していない式だとということも確認できるのだろう。
だが、そのような確認作業をしないと正しいコードかどうかわからないような、プログラムの書き方をすべきでない。セキュリティ云々以前に、プログラムの開発方法論として、できるだけ局所的な視点でコードの正当性を確認できるように書くのが、近代プログラミングの基本だ。つまり、このコード断片だけ見て、問題がないとわかるように書くべきである。
ごもっとも。耳が痛いです。私はこれまで、入力の段階でチェック済みの変数に対して、出力時には特になにもしない、というようなコーディングを結構してしまってました。改めることにします。
0 件のコメント:
コメントを投稿