入力検証
Input validation
システムへの入力の段階で、不正なデータを弾くこと。
いわゆる「入力チェック」と混同されている事がよくある。
入力は3種類に分類される。
システム的に正当な入力
業務的にも正当な入力
業務的には不当な入力(主に入力ミス、操作ミス)
システム的に不正な入力
「入力チェック」はこの場合、「業務的には不当な入力」を弾くために使うもの。
「入力検証」はこの場合、「システム的に不正な入力」を弾くために使うもの。
人が入力する時にうっかり間違えたり、業務的に許されない入力があることと、そもそもシステムとして「不正」なものとは異なる。
システムとして正当なもの(その後の処理が正しく動く事が保証されるもの)だけを入力として受け取るのが入力検証。
「入力チェック」「無害化」「フィルタリング」「サニタイズ」「整合性チェック」ではない。
任意の文字列として"(ダブルクォーテーション)や'(シングルクォーテーション)を受け取る事は何もおかしくない。
不正なデータがあれば、その時点で、そもそも受け取り拒否をするのが入力検証。
不正なデータがシステム内に入り込んでしまった後は、その不正なデータはあちこちで問題を引き起こす。
そもそも受け入れなければ、そのような問題は発生しない。
入力検証として考えられる事
そもそものデータ形式として受け取るのが不正であるもの
不正なUTF-8シーケンス
アプリケーションとして受け取るのが不正であるもの
フィールドの欠落
過剰なフィールド
未入力
値域の逸脱
書式とのアンマッチ
原則としてホワイトリスト方式で判定する。
ブラックリスト方式だと、ブラックリストに入っていないものが入ってくる。(モグラ叩きになる。)
問題
どこがシステム境界なのか(どこからが信頼できる境界か)がハッキリしない事がよくある。
入力検証にはそれなりにコストがかかるが、場当たり的にあちこちで多重に入力検証が行われるとパフォーマンスが低下する。
Keyword: 入力バリデーション,入力チェック
関連
参考