SC情報処理安全確保支援士試験 午前Ⅱ

平成28年度春期 情報処理安全確保支援士 午前Ⅱ 問21

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

“アカウント" 表に対して、 SQL文を実行したとき、 “アカウント" 表の全ての行が取得される入力パラメタはどれか。 ここで、 入力パラメタのエスケーブプ処理は行

選択肢

  1. ア
    わない。また、 “:” はSQL文の終適として解釈されるものとする。 アカウント D ユーザ名メールアドレスA001 | TAROJOHO tjoho@email.org.jp A002 | JIROJOHO jjoho@emailLorgJp A003 | HANAKOJOHO h-joho@email.orgJp 〔SQL文〕
  2. イ
    SELECT ID、ユーザ名、メールアドレスFROMアカウントWHEREユーザ名 = "| 入力パラメタ 「:
  3. ウ
    "0Rーーミリー
  4. エ
    ”' ORユーザ名 = "ユーザ名ウ-OR1=1
解き方のヒントを見る

午前II 問21:SQL文に入り込む“ずるい入力”を見抜こう

文字列をそのままSQLにくっつけてしまうと、入力欄に`' OR 1=1`のような文字を入れられたときに、WHERE条件が「いつでも真」になってしまうよ。たとえるなら、受付で合言葉を確認するはずが、「全員通してOK」という紙を勝手に差し込まれるようなもの。その結果、アカウント表の全行が取得されてしまうんだ。

この問題で問われていること

ポイントは、どの入力が本来の検索条件を壊して、全件取得につながるSQLインジェクションになるかを見抜けるかだよ。

SQL Injection Causing Full-Table Return

without escaping、 an input like quote-or-true can break the WHERE clause and make the query return every row

unescaped concatenation\nclose string literal\nadd OR 1=1\nall rows returned

確認ポイント

  • 文字列終端を意識する。
  • OR 1=1 で全件化する。
  • プレースホルダを使っていない点を見る。
正解と解説を見る

正解

ア

出典

問題文と解答は IPA 公開の過去問題冊子・解答例を基にしています。

選択肢ア(正解)

これは正解だよ。入力すると、条件が「ユーザ名が空っぽ」または「'--' と '--' が同じ」という形になるんだ。後半は、合鍵の形を見ずに「この鍵はこの鍵と同じですか?」と聞いているようなもので、必ずYESになる。だから全員分の行が取れてしまうよ。

選択肢イ

これは不正解だよ。先頭の「'--」で、その後ろの「OR 1=1」をコメント扱いにしてしまう形になる。つまり、せっかく泥棒が『全員通して』と言おうとしたのに、窓口に届く前にメモ扱いで無視される感じだよ。残る条件はほぼ「ユーザ名が空かどうか」なので、全行取得にはならないよ。

選択肢ウ

これは不正解だよ。見た目はSQLをだまそうとしているけど、結果は「ユーザ名が空」または「ユーザ名が文字列の'ユーザ名'と同じ」という条件になるだけ。名札に本当に「ユーザ名」と書いてある人を探すようなものなので、表のTARO JOHOなど全員には当たらないよ。

選択肢エ

これは不正解だよ。「OR 1=1」で全部通したい意図は見えるけど、引用符やセミコロンの並びがうまくSQL文として成立しない。受付に強引な指示を書いた紙を出しても、文の区切りがぐちゃぐちゃで読めない状態なので、全行を正しく取得する形にはならないよ。

出典:独立行政法人 情報処理推進機構(IPA)平成28年度春期 情報処理安全確保支援士試験 午前Ⅱ 問21(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針