情報処理安全確保支援士試験 情報セキュリティスペシャリスト試験 平成28年度春期 午前Ⅱ21: “アカウント”表に対して,SQL 文を実行したとき,“アカウント”表の全ての行が取得される入力パラメタはどれか。ここで,入力パラメタのエスケープ処理は行わない。

情報セキュリティスペシャリスト試験 平成28年度春期 午前Ⅱ
Q 2121 / 25
“アカウント”表に対して,SQL 文を実行したとき,“アカウント”表の全ての行が取得される入力パラメタはどれか。ここで,入力パラメタのエスケープ処理は行わない。また,“;”は SQL 文の終端として解釈されるものとする。 アカウント
IDユーザ名メールアドレス
A001TARO JOHOt-joho@email.org.jp
A002JIRO JOHOj-joho@email.org.jp
A003HANAKO JOHOh-joho@email.org.jp
〔SQL 文〕 SELECT ID,ユーザ名,メールアドレス FROM アカウント WHERE ユーザ名='|入力パラメタ|';

問題本文

“アカウント”表に対して,SQL 文を実行したとき,“アカウント”表の全ての行が取得される入力パラメタはどれか。ここで,入力パラメタのエスケープ処理は行わない。また,“;”は SQL 文の終端として解釈されるものとする。 アカウント 〔SQL 文〕 SELECT ID,ユーザ名,メールアドレス FROM アカウント WHERE ユーザ名='|入力パラメタ|';

選択肢

  • .' OR '--' = '--
  • .' OR ユーザ名 = 'ユーザ名
  • .'-- OR 1 = 1
  • .¥' OR 1 = 1';--

正解

. ' OR '--' = '--

解説

SQLインジェクションでは、WHERE句の文字列リテラルを閉じてOR条件で常に真を作り、全行を返させる。アを入れるとユーザ名='' OR '--' = '--'となり、'--' = '--'が常に真のため条件全体が真になり全行が取得される。他の選択肢は引用符やコメントの位置で構文エラーになるか条件が成立しない。実務ではプレースホルダ(プリペアドステートメント)で入力を値として扱い、文字列連結を避けることが根本対策となる。

選択肢ごとの解説

  • .''で文字列を閉じOR '--' = '--'が常に真となり全行が返るため正しい。
  • .列名同士の比較とならず構文が崩れ、全行取得の条件を満たさないため誤り。
  • .'--で先頭の引用符が閉じられず以降がコメント化して構文エラーとなり成立しないため誤り。
  • .余分な引用符やエスケープにより構文が破綻し、全行取得には至らないため誤り。

情報セキュリティスペシャリスト試験 平成28年度春期 午前Ⅱ過去問一覧へ戻る・問21