情報処理安全確保支援士試験 情報セキュリティスペシャリスト試験 平成28年度春期 午前Ⅱ 問21: “アカウント”表に対して,SQL 文を実行したとき,“アカウント”表の全ての行が取得される入力パラメタはどれか。ここで,入力パラメタのエスケープ処理は行わない。
←情報セキュリティスペシャリスト試験 平成28年度春期 午前Ⅱ
“アカウント”表に対して,SQL 文を実行したとき,“アカウント”表の全ての行が取得される入力パラメタはどれか。ここで,入力パラメタのエスケープ処理は行わない。また,“;”は SQL 文の終端として解釈されるものとする。
アカウント
| ID | ユーザ名 | メールアドレス |
|---|
| A001 | TARO JOHO | t-joho@email.org.jp |
| A002 | JIRO JOHO | j-joho@email.org.jp |
| A003 | HANAKO JOHO | h-joho@email.org.jp |
〔SQL 文〕
SELECT ID,ユーザ名,メールアドレス FROM アカウント
WHERE ユーザ名='|入力パラメタ|'; 問題本文
“アカウント”表に対して,SQL 文を実行したとき,“アカウント”表の全ての行が取得される入力パラメタはどれか。ここで,入力パラメタのエスケープ処理は行わない。また,“;”は SQL 文の終端として解釈されるものとする。 アカウント 〔SQL 文〕 SELECT ID,ユーザ名,メールアドレス FROM アカウント WHERE ユーザ名='|入力パラメタ|';
選択肢
- ア.' OR '--' = '--
- イ.' OR ユーザ名 = 'ユーザ名
- ウ.'-- OR 1 = 1
- エ.¥' OR 1 = 1';--
解説
SQLインジェクションでは、WHERE句の文字列リテラルを閉じてOR条件で常に真を作り、全行を返させる。アを入れるとユーザ名='' OR '--' = '--'となり、'--' = '--'が常に真のため条件全体が真になり全行が取得される。他の選択肢は引用符やコメントの位置で構文エラーになるか条件が成立しない。実務ではプレースホルダ(プリペアドステートメント)で入力を値として扱い、文字列連結を避けることが根本対策となる。
選択肢ごとの解説
- ア.''で文字列を閉じOR '--' = '--'が常に真となり全行が返るため正しい。
- イ.列名同士の比較とならず構文が崩れ、全行取得の条件を満たさないため誤り。
- ウ.'--で先頭の引用符が閉じられず以降がコメント化して構文エラーとなり成立しないため誤り。
- エ.余分な引用符やエスケープにより構文が破綻し、全行取得には至らないため誤り。
情報セキュリティスペシャリスト試験 平成28年度春期 午前Ⅱ の過去問一覧へ戻る・問21