平成24年度 秋期 午前 問41
セキュリティ
SQLインジェクションの問題
安全な Web アプリケーションの作り方について,攻撃と対策の適切な組合せはどれか。
〔選択肢の組合せ表〕
| 攻撃 | 対策
ア | SQL インジェクション | SQL 文の組立てに静的プレースホルダを使用する。
イ | クロスサイトスクリプティング | 任意の外部サイトのスタイルシートを取り込めるようにする。
ウ | クロスサイトリクエストフォージェリ | リクエストに GET メソッドを使用する。
エ | セッションハイジャック | 利用者ごとに固定のセッション ID を使用する。- ア(攻撃 = SQL インジェクション / 対策 = SQL 文の組立てに静的プレースホルダを使用する。)
- イ(攻撃 = クロスサイトスクリプティング / 対策 = 任意の外部サイトのスタイルシートを取り込めるようにする。)
- ウ(攻撃 = クロスサイトリクエストフォージェリ / 対策 = リクエストに GET メソッドを使用する。)
- エ(攻撃 = セッションハイジャック / 対策 = 利用者ごとに固定のセッション ID を使用する。)
答えと解説を見る
✓ これが正解ア(攻撃 = SQL インジェクション / 対策 = SQL 文の組立てに静的プレースホルダを使用する。)
解説
対策の欄だけを読むと、守りになるのは一つです。
この設問は、攻撃の名前を覚えているかを見ていません。並んでいる四つの攻撃はどれも実在しますから、攻撃名の側では一つも絞れないのです。読むべきなのは対策の欄で、そこに書かれている手当てが本当に守りになっているかを、一つずつ確かめます。正しい組合せは、SQL インジェクションに対して静的プレースホルダを使うものです。SQL インジェクションは、入力欄に SQL の断片を混ぜ込んで文の意味を書き換える攻撃です。静的プレースホルダは、SQL の骨組みを先にデータベース管理システムへ渡して確定させ、値を後から埋める作り方ですので、値としてどんな文字が来ても骨組みのほうは変わりません。混ぜられないように記号を取り除くのではなく、混ざりようのない構造にしてしまうところが要点です。残る三つは、いずれも書かれた手当てが攻撃を止めるのではなく、かえって成立しやすくする向きになっています。どこが逆を向いているかは、選択肢ごとに分けて確かめてください。
ほかの選択肢はなぜ違うのか
- イ(攻撃 = クロスサイトスクリプティング…:任意の外部サイトのスタイルシートを取り込めるようにすることは、外から持ち込んだものを画面で解釈させることにほかならず、クロスサイトスクリプティングの入口を広げます。必要なのは出力するときのエスケープです。
- ウ(攻撃 = クロスサイトリクエストフォー…:GET メソッドを使うと、パラメタが URL に載ります。画像タグやリンクを他人に踏ませるだけで送信させられてしまうので、かえって仕掛けやすくなります。画面ごとに使い捨てのトークンを埋めて照合する手当てが必要です。
- エ(攻撃 = セッションハイジャック / …:セッション ID を利用者ごとに固定してしまうと、一度盗まれた値がいつまでも通用します。ログインのたびに新しい値を発行し、推測できない値にしたうえで、通信そのものを暗号化する必要があります。
この問題の用語
- クロスサイトスクリプティング出力処理の不備を突き、利用者のブラウザで攻撃者のスクリプトを動かす攻撃です。防ぐには、出力する文字を無害な形に置き換えます。
- プレースホルダ問合せ文の値の部分を、あとから当てはめる形にしておく書き方です。値を文と分けて渡すので、文の使い回しや不正な文の混入防止に役立ちます。
- セッションハイジャックログイン中の利用者のIDを盗み、なりすましてアクセスする攻撃です。推測しにくい乱数をセッションIDに使うことが対策になります。
出典:平成24年度 秋期 応用情報技術者試験 午前 問41
同じ用語が出る問題
- 令和7年度 春期 午前 問42:OSコマンドインジェクション対策(プレースホルダ)
- 令和7年度 春期 午前 問36:脆弱性に関する問題(クロスサイトスクリプティング)
- 平成28年度 春期 午前 問41:セッションハイジャックの問題(セッションハイジャック)
- 平成27年度 秋期 午前 問44:ブルートフォース攻撃に関する問題(セッションハイジャック)
- 平成26年度 春期 午前 問40(プレースホルダ)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)