情報セキュリティ

基本情報技術者試験入力値検証」の問題

情報セキュリティ情報セキュリティ難易度:normal
A社のWebアプリで、利用者が入力する都道府県コードを検証する処理を実装する。コードは『01』から『47』までの定義済みの値だけが正当である。多様な不正入力を確実に排除するための検証方式として、最も適切なものはどれか。
取り得る値の集合を事前に確定させ、その集合に属さない入力をすべて拒む。
過去に攻撃で使われた危険な文字列のパターンを列挙し、該当する入力を拒否する。
入力された文字列の長さが規定のバイト数以内に収まっているかだけを確認する。
入力に含まれる記号文字を無害な文字へ置換してから処理を継続する。
正解
取り得る値の集合を事前に確定させ、その集合に属さない入力をすべて拒む。

正当な値が有限かつ明確に列挙できる場面では、許可する値だけを定義して一致した入力のみ通すホワイトリスト方式が最適である。定義外の入力は理由を問わず一律に弾けるため、未知の攻撃パターンも含めて確実に排除でき、漏れが生じにくい。

?選択肢ごとの解説

ア ○正当な値が有限かつ明確に列挙できる場面では、許可する値だけを定義して一致した入力のみ通すホワイトリスト方式が最適である。定義外の入力は理由を問わず一律に弾けるため、未知の攻撃パターンも含めて確実に排除でき、漏れが生じにくい。
イ ×危険な文字列を列挙して拒否するブラックリスト方式は、列挙漏れや新手の攻撃に対応できず、正当値が明確な本件では過剰かつ不確実である。
ウ ×長さの確認だけでは、規定バイト数内に収まる不正な値(例えば存在しないコード)を通してしまい、正当性の検証にならない。
エ ×記号の置換は無害化の一手だが、置換後も範囲外の値が残り得るため、定義済み値だけを通すべき本件の要件を満たさない。

くわしく

入力値検証はホワイトリスト(許可リスト)方式とブラックリスト(拒否リスト)方式に大別される。正当値が列挙可能なら前者が原則であり、『許可したものだけ通す』ことで未知の脅威にも頑健になる。ブラックリストは正当値を定義できない場合の次善策である。

本番での押さえどころ

試験のコツ

正当な値が有限・明確に列挙できる入力検証はホワイトリスト方式が原則。『許可したものだけ通す』が鍵語である。

覚え方

ホワイトリストは『入場者名簿』。名簿にある人だけ通すので、想定外の侵入者を確実に止められる。

よくある誤り

攻撃文字列を拒否すれば安全と考えブラックリストを選ぶ。列挙漏れが必ず生じ、正当値が明確な場面ではホワイトリストが優先される点を見落とす。

情報セキュリティの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-sec-0109

【基本情報技術者試験】入力値検証の問題 — 解答・解説|ukamiru 過去問