情報セキュリティの基礎

SQLインジェクションへの対策として、プレースホルダを使うプリペアドステートメント(パラメータ化クエリ)が、入力の中の危険な文字を取り除く方法より根本的な対策とされる理由として正しいものはどれか。

  1. A入力を暗号化してからデータベースに渡すので、攻撃者に中身を読まれないから
  2. Bブラウザの側で入力の文字の種類を確かめるので、サーバに不正な文字列が届かなくなるから
  3. CSQL文の構造を先に確定させ、入力はあとから値としてだけ渡すので、入力にどんな文字が含まれていても命令の一部として解釈されないから
答えと解説を見る

正解:C. SQL文の構造を先に確定させ、入力はあとから値としてだけ渡すので、入力にどんな文字が含まれていても命令の一部として解釈されないから

プリペアドステートメントでは、まず「SELECT … WHERE id = ? AND password = ?」のように、値の部分を記号(プレースホルダ)にしたSQL文をデータベースに渡して構造を確定させ、そのあとで入力を値としてだけ結び付けます(バインド)。入力は最初から最後までデータとして扱われるので、引用符などが含まれていても、条件を付け加えるような命令の一部にはなりません。入力から危険な文字を取り除いたりエスケープしたりする方法は、データベースの種類や文字コードごとの細かい規則を漏れなく扱う必要があり、1か所でも漏れると攻撃が成り立ちます。また、ブラウザ側での入力のチェックは、攻撃者がブラウザを通さずに直接リクエストを送れば回避されるので、利便性のためのものであり、セキュリティの対策にはなりません。これに加えて、データベースに接続するアカウントの権限を最小にしておくと、被害を小さくできます。

  • A. プリペアドステートメントは入力を暗号化するものではありません。値とSQL文の構造を分けて扱うことが要点です。
  • B. ブラウザ側のチェックは、攻撃者が直接リクエストを送れば回避できるので、対策になりません。
  • C. 正しい。文の構造を先に固め、入力は値としてだけ扱うので、命令として解釈されることがありません。
この分野を解く 分野ページへ

関連する計算ツール

情報セキュリティの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

情報セキュリティの基礎のほかの問題

  1. 掲示板のWebアプリケーションで、利用者が投稿した文章の中のスクリプトが、ほかの閲覧者のブラウザで実行されてしまう脆弱性があった。この脆弱性の名前と、根本的な対策の組み合わせとして正しいものはどれか。
  2. Webアプリケーションで、ログインしたままの利用者が攻撃者の用意した罠のページを開くと、利用者のブラウザから正規のサイトへ、利用者の意図しない送金や設定の変更のリクエストが送られてしまう脆弱性がある。この脆弱性への対策として適切なものはどれか。
  3. Webアプリケーションが、URLのパラメータで指定されたファイル名を、公開用のフォルダの名前とつなげて読み出して表示している。ファイル名に ../ を含む値を指定されると、公開用のフォルダの外にある設定ファイルなどを読み出されてしまう。この攻撃の名前と対策の組み合わせとして正しいものはどれか。
  4. Webアプリケーションで、ログインの前と後で同じセッションIDを使い続けていると、攻撃者があらかじめ用意したセッションIDを利用者に使わせ、利用者がログインした後にそのIDで利用者になりすますおそれがある。この攻撃への対策として最も適切なものはどれか。
  5. DDoS攻撃の説明として正しいものはどれか。