情報セキュリティマネジメント試験 過去問解説

SQLインジェクションとは?情報セキュリティマネジメント試験 令和5年度 科目A 問7を解説

情報セキュリティマネジメント試験 令和5年度 科目A 問7は、SQLインジェクションに関する理解を問う問題です。検索から入っても、問題文、選択肢、正解、解説、各選択肢がなぜ違うかをこのページだけで確認できます。

問題文

Webアプリケーションにおけるセキュリティ上の脅威とその対策に関する記述のうち,適切なものはどれか。

この問題の出題ポイント

  • SQLインジェクションの定義だけでなく、問題文中の条件がどの選択肢に当てはまるかを確認する。

選択肢

  1. OSコマンドインジェクションを防ぐために,Webアプリケーションが発行するセッションIDに推測困難な乱数を使用する。
  2. SQLインジェクションを防ぐために,Webアプリケーション内でデータベースへの問合せを作成する際にプレースホルダを使用する。正解
  3. クロスサイトスクリプティングを防ぐために,Webサーバ内のファイルを外部から直接参照できないようにする。
  4. セッションハイジャックを防ぐために,Webアプリケーションからシェルを起動できないようにする。

正解

: SQLインジェクションを防ぐために,Webアプリケーション内でデータベースへの問合せを作成する際にプレースホルダを使用する。

解説

本問はWebアプリケーションの代表的な脆弱性とその正しい対策の組合せを問うものである。SQLインジェクションは入力値がSQL文に混入することで起こるため、問合せをあらかじめ固定しパラメータを別に渡すプレースホルダ(バインド機構)が有効であり、正解はイである。各脅威には固有の対策があり、対策と脅威の対応を取り違えないことが重要である。

なぜ他の選択肢が違うのか

  • セッションIDに推測困難な乱数を使うのはセッションハイジャック対策であり、OSコマンドインジェクションの対策ではないため誤りです。

  • イ(正解)

    プレースホルダ(バインド機構)を用いると入力値がSQL構文として解釈されないためSQLインジェクションを防げ、正しい記述です。

  • サーバ内ファイルへの直接参照を防ぐのはディレクトリトラバーサル等への対策であり、出力時のエスケープが要となるクロスサイトスクリプティングの対策ではないため誤りです。

  • シェル起動を禁止するのはOSコマンドインジェクション対策であり、セッションハイジャックの対策ではないため誤りです。

解き方の整理

SQLインジェクションの問題では、選択肢のキーワードだけで判断せず、問題文が示す条件と正解選択肢の説明が一致しているかを見ます。誤答選択肢は、似た用語を混ぜる、主体を入れ替える、目的や範囲を広げすぎる、という形で作られることが多いため、選択肢別解説まで確認しておくと復習効率が上がります。

関連問題

前後の問題

復習を続ける

間違えた問題、苦手タグ、模試履歴を保存して復習する導線を用意しています。広告なしPro、弱点分析、復習リマインダーは段階的に提供予定です。