バリデーションは仕様を基準にして行う~大垣さんと徳丸の会話~

バリデーションの基準について大垣さんに聞きました
3
徳丸 浩 @ockeghem

徳丸本を見返したら、「入力値検証の主目的はセキュリティのためではありませんが、セキュリティのために役立つ場合もあります」(P76)とありますね。これでいいんじゃないの? #wasbook

2011-12-19 17:14:39
Yasuo Ohgaki (大垣靖男) @yohgaki

@ockeghem 世界的にはセキュリティ対策の為に入力のバリデーションは絶対にしなさい、という話になっていると思いますよ。

2011-12-19 17:16:13
徳丸 浩 @ockeghem

@yohgaki その際の入力バリデーションは、何を基準に行うのですか?

2011-12-19 17:20:16
徳丸 浩 @ockeghem

@yohgaki 大垣さん推薦の「Ajaxセキュリティ」では、氏名のバリデーションの際にアポストロフィを許容しなければならないが、安全のため、アポストロフィは一つまでに制限するとよい、と書かれています。セキュリティ基準にバリデーションすると、そういう珍妙な話になりがちだと思います

2011-12-19 17:24:06
徳丸 浩 @ockeghem

@yohgaki (1)バリデーションすべきは同意、(2)「セキュリティ対策」かどうかはどうでもいい、(3)どうバリデーションするかが問題で、徳丸の主張は「アプリケーションの仕様にそって淡々とバリデーションする」

2011-12-19 17:28:30
Yasuo Ohgaki (大垣靖男) @yohgaki

@ockeghem アプリケーションの仕様「も」ですね。アプリケーション仕様で明示されていないような物もチェックすべき場合もあるので。

2011-12-19 17:55:46
Yasuo Ohgaki (大垣靖男) @yohgaki

シングルクオート二つを除外、という考え方はサニタイズ脳ですね。海外では今でも結構まだ普通に見かけます。

2011-12-19 17:57:51
徳丸 浩 @ockeghem

それが明確にならないと議論が混乱しますね。文字エンコーディングなどはすぐ思いつきますが、それ以外にありますか? RT @yohgaki: @ockeghem アプリケーションの仕様「も」ですね。アプリケーション仕様で明示されていないような物もチェックすべき場合もあるので。

2011-12-19 17:57:55
Yasuo Ohgaki (大垣靖男) @yohgaki

入力仕様が不明確だったり、とかがあるので対象の仕様が明確でないと何とも。 RT @ockeghem: それが明確にならないと議論が混乱しますね。文字エンコーディングなどはすぐ思いつきますが、それ以外にありますか?

2011-12-19 18:02:38
Yasuo Ohgaki (大垣靖男) @yohgaki

@ockeghem ところで文字エンコーディングはアプリで入力時にバリデーションすべきは私も大賛成です。

2011-12-19 18:03:57
徳丸 浩 @ockeghem

仕様書に、項目ごとの文字種、書式、文字長、文字エンコーディングが明記されていたとして、追加のチェックは必要ですか? RT @yohgaki: 入力仕様が不明確だったり、とかがあるので対象の仕様が明確でないと何とも。 RT @ockeghem: それが明確にならないと議論が混乱

2011-12-19 18:25:28
Yasuo Ohgaki (大垣靖男) @yohgaki

その例で直ぐ思いつくのは数値の範囲のチェックがない事ですね RT @ockeghem: 仕様書に、項目ごとの文字種、書式、文字長、文字エンコーディングが明記されていたとして、追加のチェックは必要ですか? RT 入力仕様が不明確だったり、とかがあるので対象の仕様が明確でないと

2011-12-19 18:42:45
徳丸 浩 @ockeghem

そうでしたね。数値の範囲も仕様書に書くべき内容ですが、他にはありますか? RT @yohgaki: その例で直ぐ思いつくのは数値の範囲のチェックがない事ですね RT @ockeghem: 仕様書に、項目ごとの文字種、書式、文字長、文字エンコーディングが明記されていたとして…

2011-12-19 20:04:55
Yasuo Ohgaki (大垣靖男) @yohgaki

@ockeghem 特殊な物もあるでしょうけど(ビットパターンのチェックとか)そういう物を除けば、それで十分だと思います。

2011-12-20 07:12:16
徳丸 浩 @ockeghem

@yohgaki ということは、仕様書をちゃんと書けば、それに従ってバリデーションすればよいということですね。

2011-12-20 07:53:37
Yasuo Ohgaki (大垣靖男) @yohgaki

入力バリデーションはプログラマの仕事(設計者の仕事でもあるけど)というのは当たり前すぎるのにどうして異論があるのか不思議でならない。

2011-12-20 09:01:36
Yasuo Ohgaki (大垣靖男) @yohgaki

入力バリデーションセキュリティ対策じゃない、という話には論理的矛盾がある。入力バリデーションはセキュリティ対策であるのに、これに対して異論があるのも理解できない。

2011-12-20 09:03:00
徳丸 浩 @ockeghem

@yohgaki 仕様をちゃんと作らない前提で、どうやってバリデーションの仕様を決めるのでしょうか?

2011-12-20 09:48:08
Yasuo Ohgaki (大垣靖男) @yohgaki

アジャイル系Web開発ではプログラマが普通に仕様を決めてますよ。この為、どうバリデーションすべきかは知ってないとならないです。RT @ockeghem 仕様をちゃんと作らない前提で、どうやってバリデーションの仕様を決めるのでしょうか?

2011-12-20 10:32:33
徳丸 浩 @ockeghem

@yohgaki きちんとした仕様書は作らないけど、仕様は明確になっていると言うことですよね。文書化されているかの違いと言うことで

2011-12-20 10:35:19
Yasuo Ohgaki (大垣靖男) @yohgaki

@ockeghem セキュアかどうかは別として仕様は明らかになってないとならないですね。出来れば作る前がよいけど少なくとも作った後では。

2011-12-20 10:37:53
Yasuo Ohgaki (大垣靖男) @yohgaki

@ockeghem 作った後はコードが仕様なので、分かりやすいかどうかは別にして仕様はある状態になりますね。

2011-12-20 10:39:11