情報セキュリティ

基本情報技術者試験M社の会員検索機能で、利用者の入力した会員名をSQL文に直接連結して問合せを実行している。診断で『名前欄に特殊な…

情報セキュリティ情報セキュリティ難易度:hard
M社の会員検索機能で、利用者の入力した会員名をSQL文に直接連結して問合せを実行している。診断で『名前欄に特殊な文字列を入れると本来見えないはずの会員情報が返る』脆弱性が指摘された。アプリ側で講じる根本対策として、最も適切なものはどれか。
値をバインド機構で受け渡し、構文部分と切り離して問合せを組み立てる。
危険な記号を含む入力を拒否する禁止文字リストをあらかじめ設けて事前に弾く。
問合せに用いるDB接続アカウントの権限を参照専用に絞り込む。
検索結果を返す前に件数の上限を設け、一度に返る行数を抑える。
正解
ア.値をバインド機構で受け渡し、構文部分と切り離して問合せを組み立てる。

脆弱性の原因は『入力値をSQL文へ直接連結している』点にある。値をバインド機構(プレースホルダ)に渡して構文部分と切り離して問合せを組み立てると、入力値はあくまでデータとして扱われ、入力に紛れ込ませた命令が構文として解釈されないため、SQLインジェクションを根本から無効化できる。

?選択肢ごとの解説

ア ○脆弱性の原因は『入力値をSQL文へ直接連結している』点にある。値をバインド機構(プレースホルダ)に渡して構文部分と切り離して問合せを組み立てると、入力値はあくまでデータとして扱われ、入力に紛れ込ませた命令が構文として解釈されないため、SQLインジェクションを根本から無効化できる。
イ ×禁止文字リストによる拒否は列挙漏れやエンコードによる回避が起きやすく、許可した文字の組合せで成立する注入を取りこぼす。
ウ ×接続アカウントを参照専用にしても、参照系の注入で会員情報を読み出される経路は残り、連結実装に起因する注入自体は解消しない。
エ ×返却行数の上限は一度に漏れる量を抑えるだけで、注入された問合せがDB内で実行される事実は変わらず脆弱性は残存する。
この問題の「深掘り・誤答の完全解説・覚え方」は、登録すると読めます。

基本情報技術者試験は全4,036問。公開しているのはその一部で、登録すると残りも一問ごとにAI解説つきで解けます。SRS暗記カード・全真模試・弱点診断まで。

登録は1分・クレジットカード不要。無料のまま練習・暗記カード・模試まで使えます。

作成・校閲:ukamiru編集部 · 基本情報技術者試験 過去問 · fe-b-sec-0013

【基本情報技術者試験】M社の会員検索機能で、利用者の入力した会員名をSQL文に直接…|正解「値をバインド機構で受け渡し、…」|ukamiru 過去問