永きに渡るバリデーション論争に終止符を打つために
記録よると最初のバリデーション論争が起こったのは2008年だそうです。
その後、たびたび論争が起き現在に至ると言うのが人類の歴史です。
この論争はいろいろなトピックを含む興味深いもの(とどうでもよいものの集合)ですが、一言で表すとすると、以下の問いに集約できるのではないかと思います。
入力バリデーションはセキュリティ対策かどうか?
そして、そろそろこの論争にも終止符を打てないかと思います。なんとなく疲れてきている人が多そうなためです(w
そのために何が一番必要かと考えると、言葉や概念の整理、定義がやっぱり必要なのではないかと思いました。
概念の整理
アプリケーション仕様とセキュリティ仕様
私の理解では、「アプリケーション仕様」の中に「セキュリティ仕様」があります。アプリケーション仕様の方が広い概念であり、セキュリティ仕様はその一部になります。
アプリケーション仕様⊃セキュリティ仕様
そして、セキュリティ仕様を実装したものが「セキュリティ対策」です。
ただし、これだけでは、セキュリティ対策が何なのかはわかりません。
セキュリティ対策とは何か?
日本語として普通に考えると、セキュリティ対策は「セキュリティのための対策」なのかなと思います。でも、まだ漠然としています。
また、主な議論の対象であるWebアプリケーションセキュリティやインターネットセキュリティという分野において、「セキュリティ対策」の公式な定義はないようです。
ということで、漠然とした概念が議論をややこしくしているようです。
twitter上での私の情報収集によれば、この議論でのセキュリティ対策の定義には大きくわけて以下の2つがあるようです。
- 結果としてリスクを緩和するすべての対策
- リスク緩和を主目的として実施する対策
ここでは、1.を「広義のセキュリティ対策」、2.を「狭義のセキュリティ対策」と呼ぶことにします。
入力バリデーションはセキュリティ対策なのか?
「広義のセキュリティ対策」を採用すれば、入力バリデーションはリスクを緩和することも多々あるので「入力バリデーションはセキュリティ対策である」となるでしょう。
「狭義のセキュリティ対策」を採用すれば、入力バリデーションはリスク緩和を主目的とはしていないでしょうから「入力バリデーションはセキュリティ対策ではない」となるでしょう。
つまり、入力バリデーションはセキュリティ対策なのか?という問いの答えは「はい」でも「いいえ」でもどちらも正しいと言えます。
あるいは、言い換えれば、「入力バリデーションはセキュリティ対策なのか?」は「セキュリティ対策が何なのか」という前提条件により結果は変わります。
われわれは何を議論しているのか?
入力バリデーションはセキュリティ対策なのか?についてはどちらもと言える、という結論に至りました。
そして新たな問い、あるいは真の問いが生じます。
入力バリデーションがセキュリティ対策か否かを区別する必要性は何か?
あるいは、
入力バリデーションはセキュリティ対策であるべきか?
念のため記載しておきますが、残念ながら入力バリデーションをしなくてもいいという意見の方はいないようです。入力バリデーションがセキュリティ対策か否かにかかわらず、入力バリデーションは実施すべきとされています。
以下は徳丸さんの日記より引用 http://blog.tokumaru.org/2015/02/eximghost.html
では、バリデーションはどのように考えればよいでしょうか。従来から言っていることですが以下を推奨します。
- バリデーションの基準はアプリケーションの仕様である
- 仕様を満たさない入力値は再入力を促すナビゲーションを行う
- アプリケーション仕様として、すべての入力パラメータの以下項目を定義しておく
- 文字種
- 文字列長の最小・最大値
- 数値の場合は最小値・最大値
- メールアドレス等は書式
文字列長に関しては、制限をとくに設けていないアプリケーションも多いと思いますが、実用性を損なわない範囲で上限値を定めて、その上限まで正常に動作することと、上限値を超えた場合にエラーになることをテスト項目に加えるとよいでしょう。
(引用ここまで)
もし、入力バリデーションを省略してもいいという意見の方がいればお教えください。
関連
Date: 2015/02/05