「入力ミス」と「入力バリデーションエラー」の違いに関する大垣さんと徳丸のやり取り

「入力ミス」と「入力バリデーションエラー」の違いについて、大垣さんのご著書「Webアプリセキュリティ対策入門 ~あなたのサイトは大丈夫?」に言及がないようだがと質問したところ、「プログラマにとって当たり前過ぎて説明する必要もない」というお返事、サンプルにその実装がないようですがと質問すると、「もし無いならバグですね」と返答いただきました
4
徳丸 浩 @ockeghem

推測で勝手に書きましたので間違っていたらご指摘ください > @yohgaki 勝手に解説:大垣流バリデーション入門 - 徳丸浩のtumblr http://t.co/rffsHpzUBW

2013-07-16 16:46:38
Yasuo Ohgaki (大垣靖男) @yohgaki

@ockeghem もしプログラマが「入力ミスと入力バリデーションエラーの区別ができない」という事は「プログラマが入力仕様を理解していない」という事です。正直、何が難しいのか理解できません。 http://t.co/Xkzs44zIJw

2013-07-16 19:28:41
Yasuo Ohgaki (大垣靖男) @yohgaki

メールアドレスとかの具体例を挙げていますが、一般論としては入力仕様が定義され、正しく理解していれば、自ずと「正しい入力」は定義できます。「正しい入力」以外がエラーとすべき物としか RT @ockeghem: 私は区別できないのですが、どなたか教えていただけないでしょうか?

2013-07-17 02:54:12
徳丸 浩 @ockeghem

正しい入力は分かります。正しくない入力が「入力ミスと入力バリデーションエラ」になると思いますが、「入力ミスと入力バリデーションエラ」を区別する方法が分かりません RT @yohgaki: …「正しい入力」以外がエラーとすべき物としか…

2013-07-17 07:02:56
Yasuo Ohgaki (大垣靖男) @yohgaki

自分が作っているプログラムの入力仕様を正しく理解していればなる訳がありませんよ。フォーマットされた入力か自由入力か、それさえも解らずにプログラムしている人が居るとすれば問題ありです。 RT @ockeghem: 正しくない入力が「入力ミスと入力バリデーションエラ」になると

2013-07-18 17:08:24
徳丸 浩 @ockeghem

大垣さんのご著書には「入力ミス」と「入力バリデーションエラー」の違いは説明されていないようですが、本を書かれた後、考えが変わった(進化した)ということでしょうか? RT @yohgaki: 自分が作っているプログラムの入力仕様を正しく理解していればなる訳がありませんよ。…

2013-07-19 11:40:22
徳丸 浩 @ockeghem

考えが変わること自体は否定してないですよ。考えがずっと変わらないとしたら、それは進歩がないということでもありますから。ただ、変わったことを明記すると、周囲が混乱しなくてよいと思います。僕も気をつけたいと思います。

2013-07-19 11:44:15
Yasuo Ohgaki (大垣靖男) @yohgaki

プログラマにとって当たり前過ぎて説明する必要もない、と思っていたのですが現実に合わせる必要がありますね RT @ockeghem: 大垣さんのご著書には「入力ミス」と「入力バリデーションエラー」の違いは説明されていないようですが

2013-07-19 13:29:00
徳丸 浩 @ockeghem

ご著書のサンプルスクリプトにそれが反映されていないのはバグですか? それとも私の見る目がないからですか? RT @yohgaki: プログラマにとって当たり前過ぎて説明する必要もない、と思っていたのですが現実に合わせる必要がありますね RT @ockeghem: 大垣さんのご著書

2013-07-19 13:44:49
Yasuo Ohgaki (大垣靖男) @yohgaki

もし無いならバグですね RT @ockeghem ご著書のサンプルスクリプトにそれが反映されていないのはバグですか? それとも私の見る目がないからですか? RT @yohgaki: プログラマにとって当たり前過ぎて説明する必要もない、と思っていたのですが現実に合わせる必要があり

2013-07-19 13:56:00
Yasuo Ohgaki (大垣靖男) @yohgaki

私ならバリデーションエラー(あり得ない入力)と入力ミス(あり得る入力)の区別ができないプログラマは要りません。プログラマを雇う時にFizzBuzzを書かせる事がありますが、バリデーションエラーと入力ミスの区別ができるか?確かめると良いかも知れません。

2013-07-19 13:45:52
徳丸 浩 @ockeghem

@yohgaki その説明なら分かりますが、現実のアプリで両者を区別している例がありますか?

2013-07-19 14:54:45
徳丸 浩 @ockeghem

@yohgaki それと、SQLインジェクションやXSSの攻撃文字列は『入力ミス』と判定されますが、問題ありませんか?

2013-07-19 15:00:03
徳丸 浩 @ockeghem

「あり得ない入力」について、例示の形でいくつか挙げてみますね。まず、文字エンコーディングのエラー、パーセントエンコーディングのエラー…これらは「入力間違い」では混入しない…

2013-07-20 09:59:46
徳丸 浩 @ockeghem

「あり得ない入力」続き、JavaScriptやinput要素のmaxlength等でチェックしているのに、そのチェックを突破している値…ただし、JavaScriptを無効にしているユーザをどうするかという問題は残る…

2013-07-20 10:01:17
徳丸 浩 @ockeghem

「あり得ない入力」続き、セレクトボックスとかチェックボックス、ラジオボタンの選択肢にない値…

2013-07-20 10:02:02
徳丸 浩 @ockeghem

「あり得ない入力」続き、バリデートずみの値を保持するhiddenパラメータが仕様外の値になっている場合…くらいかな。まだあるかもしれないけど

2013-07-20 10:02:50
徳丸 浩 @ockeghem

「あり得ない値」を区別する目的は、「入力間違い」に対しては再入力を促すが、「あり得ない値」の場合は「攻撃」とみなして、ログアウト、遮断したいということだと思います…そんなサイト見たことないけど、気をつけて探せばあるかもしれない…WAFを導入している場合と区別がつきにくいと思う

2013-07-20 10:05:22
徳丸 浩 @ockeghem

「あり得ない値」を区別するデメリットは、実装が複雑になる(割にメリットがあまりない)ことでしょうね。だから、実装例を見かけない。大垣さんのご著書では、入力間違いも含めて全て「あり得ない値」として扱われている。(入力間違いという概念は、解説上も実装上も見あたらない)

2013-07-20 10:07:33
Yasuo Ohgaki (大垣靖男) @yohgaki

@ockeghem 入力値検査はKnown goodを定義し、それ以外を排除する物です。対話的入力での入力ミスはKnown goodの範囲です。こう考えるのが当たり前のことだと思っていましたが、考えを変えないとならな.. http://t.co/iGr3HiF26E

2013-07-21 17:55:58
Yasuo Ohgaki (大垣靖男) @yohgaki

@ockeghem WAFを使ってホワイトリスト型で守るより確実で簡単です。アプリケーションを作っている人が実装するのですから、入力仕様はよく理解しているはずです。これを解らずプログラムしている人も居るようなので解説.. http://t.co/iGr3HiF26E

2013-07-21 17:59:06
徳丸 浩 @ockeghem

ええ、そこは異論ありません。入力仕様から外れるもののうち、入力ミスとバリデーションエラーをどう区別するのかという疑問です RT @yohgaki: @ockeghem WAFを使ってホワイトリスト型で守るより確実で簡単です。アプリケーションを作っている人が実装するのですから…

2013-07-21 18:03:48
徳丸 浩 @ockeghem

ほう、それは意外でした。そうすると、数字入力の際にうっかりq2と入力したり、6'と入力してしまったものの、Known goodの範囲なのでしょうか? RT @yohgaki: 対話的入力での入力ミスはKnown goodの範囲です

2013-07-21 18:01:52
Yasuo Ohgaki (大垣靖男) @yohgaki

インタラクティブな入力で送信側がチェックしてないなら、当然Known goodです。 RT @ockeghem: ほう、それは意外でした。そうすると、数字入力の際にうっかりq2と入力したり、6'と入力してしまったものの、Known goodの範囲なのでしょうか?

2013-07-21 18:05:32
徳丸 浩 @ockeghem

OWASPの解説からAccept known goodの項を見る限り、そうは読めませんね。厳格にチェックしています https://t.co/xh1cKlX5OQ @yohgaki: インタラクティブな入力で送信側がチェックしてないなら、当然Known goodです…

2013-07-21 18:10:05