入力バリデーションはセキュリティ対策です。システムが意図通りに動作するように対策する入力バリデーションをセキュリティ対策ではないとするならば,システムが意図通りに動作するようエスケープしたりヘルパー関数(Viewヘルパーやプリペアードクエリ)を利用することもセキュリティ対策ではないということになってしまいます。

第45回 入力バリデーションはセキュリティ対策 :なぜPHPアプリにセキュリティホールが多いのか?|gihyo.jp … 技術評論社

「セキュリティ対策ではないということになってしま」ってもよいのではないか。

われわれWebアプリ開発者は、SQLインジェクションを防ぐためにプリペアド・ステートメントを使うのではない。SQLを正しく組み立て、意図通りに実行させるために、簡単で確実なプリペアド・ステートメントを利用するのだ。その結果、SQLインジェクションは防げるだろうが、それは主眼ではない。

XSSとエスケープについても同様である。XSSを防ぐためにエスケープするのではない。HTMLを正しく組み立てるために、適切なエスケープ処理を施さなければならないのだ。


とはいえ、この「適切なエスケープ処理」が難しい。SQLにおけるプリペアド・ステートメントのような、簡単で確実な手段はないものか。

Closure Templatesのオートエスケープが最強すぎる件 - teppeis blog」で紹介されている Closure Templates は、コンテキストに応じた適切なエスケープ処理を自動的に施してくれるものらしい。

こうした方向にテンプレートエンジンが進化していけば、Webアプリ開発者の負担が減りそうだ。