技評の記事「入力バリデーションはセキュリティ対策」に読者を混乱させるとコメントしたら名誉毀損だと恫喝された件
@ockeghem アプリケーションの仕様「も」ですね。アプリケーション仕様で明示されていないような物もチェックすべき場合もあるので。
2011-12-19 17:55:46シングルクオート二つを除外、という考え方はサニタイズ脳ですね。海外では今でも結構まだ普通に見かけます。
2011-12-19 17:57:51それが明確にならないと議論が混乱しますね。文字エンコーディングなどはすぐ思いつきますが、それ以外にありますか? RT @yohgaki: @ockeghem アプリケーションの仕様「も」ですね。アプリケーション仕様で明示されていないような物もチェックすべき場合もあるので。
2011-12-19 17:57:55入力仕様が不明確だったり、とかがあるので対象の仕様が明確でないと何とも。 RT @ockeghem: それが明確にならないと議論が混乱しますね。文字エンコーディングなどはすぐ思いつきますが、それ以外にありますか?
2011-12-19 18:02:38@ockeghem ところで文字エンコーディングはアプリで入力時にバリデーションすべきは私も大賛成です。
2011-12-19 18:03:57仕様書に、項目ごとの文字種、書式、文字長、文字エンコーディングが明記されていたとして、追加のチェックは必要ですか? RT @yohgaki: 入力仕様が不明確だったり、とかがあるので対象の仕様が明確でないと何とも。 RT @ockeghem: それが明確にならないと議論が混乱
2011-12-19 18:25:28文字エンコーディングの入力値チェックをアプリでしろという意見は賛成できん。あれこそバッドノウハウだと思う。本来なら言語やフレームワークでやるべきことだと思う
2011-12-19 18:28:02そもそも、ISMSでもPCIDSSでもすべての項目を満たさないといけないなんて言ってないはず。入力値のバリデーションも同じで、必ずしも実施すべきなんていってないんだが
2011-12-19 18:34:38勿論、URLエンコードしたバイナリデータがない訳でもないので、その対処は必要だけど、文字データとしては不正何だから、文字データとして取り扱いを開始する際に言語なりフレームワークでチェック出来るだろ?
2011-12-19 18:42:02その例で直ぐ思いつくのは数値の範囲のチェックがない事ですね RT @ockeghem: 仕様書に、項目ごとの文字種、書式、文字長、文字エンコーディングが明記されていたとして、追加のチェックは必要ですか? RT 入力仕様が不明確だったり、とかがあるので対象の仕様が明確でないと
2011-12-19 18:42:45@ikepyon バッドノウハウ?そこら中のソフトが入力文字エンコーディングのバリデーションをしてますよ。最も危険なWebアプリで文字エンコーディングのバリデーションをしないのは瑕疵です。Javaのように強制的にバリデーションさせないプラットフォームならアプリがやって当然です。
2011-12-19 18:47:14@ikepyon 文字エンコーディングのバリデーションは、バイナリもテキストも受け入れるアプリではシステムが勝手にやるような物じゃないですよ。仕組みとして強制させる事はできても、自動で判別は無理。
2011-12-19 18:50:32@yohgaki だからそれはそのような言語やフレームワークが設計されてないからでは?文字エンコーディングのバリデーションなんてアプリの要求仕様に微塵もありませんよ? 文字データでない物を文字データとして取り扱える言語なんかの問題だと思いますよ。
2011-12-19 18:52:26@ikepyon データベースやテキスト処理用のライブラリはエンコーディングのバリデーションを普通にやってますけど。Webアプリを作ってる人は中心であるWebアプリでバリデーションをするのは当然です。リスクを軽減するために必須。言語で完全な自動判別は無理ですよ。
2011-12-19 18:56:33@ikepyon フレームワークは使わなくてもアプリは作れるし、フレームワークを作る人も沢山います。結局、アプリの責任だと明確にしておかないと何処かに脆弱性が生まれます。
2011-12-19 18:58:26@ikepyon 次の次くらいに何故、入力文字エンコーディングのバリデーションがアプリの責任なのかgihyo.jpで書きますよ。もうちょっと先になるかも知れないけど。
2011-12-19 19:00:16別に自動で判別しなくても、内部の文字エンコーディングが決められたら、それにそぐわない文字データがきたら、エラーにするということは出来ると思う
2011-12-19 19:06:27文字データかバイナリデータか自動識別できないのは当然。でも、プログラマはそのデータが文字データかバイナリデータかは認識してプログラムを作れる
2011-12-19 20:02:32そうでしたね。数値の範囲も仕様書に書くべき内容ですが、他にはありますか? RT @yohgaki: その例で直ぐ思いつくのは数値の範囲のチェックがない事ですね RT @ockeghem: 仕様書に、項目ごとの文字種、書式、文字長、文字エンコーディングが明記されていたとして…
2011-12-19 20:04:55文字データ以外のものを文字データとして取り扱うのがおかしいのだから、文字データを取り扱う関数なり、変数で文字エンコーディングのチェックをすればいいだけの話だと思う。もちろん、文字エンコーディング方式はいろいろあるので、それは別途その環境で取り扱えるコードを設定で指定しておけばいい
2011-12-19 20:05:07しかし、現行の言語や、フレームワークではそれが実装されてないから、仕方なくプログラマが文字エンコーディングのチェックが必要なのが現状だと思う
2011-12-19 20:14:52文字エンコーディングのチェックこそWAFでやれれば、幸せになるプログラマは多いと思うけどな。通常のリクエストじゃおかしな文字データが入るわけないんだし
2011-12-19 20:16:49入力バリデーションは、ふつーに大事なことだと思いますけどね。何のためのバリデーションをおこなうのかがもっと大事では。それを考えさせずに「セキュリティ対策です」の一言で片付けちゃうのは、どうなんだか。。 / “なぜPHPアプリにセキュリ…” http://t.co/1XbSwg9S
2011-12-19 21:19:02