ホーム > 情報処理安全確保支援士試験 > 2018年 春期

情報処理安全確保支援士試験 2018年 春期 午前217


SQL インジェクション対策について, Web アプリケーションの実装における対策と,Web アプリケーションの実装以外の対策として,ともに適切なものはどれか。
選択肢画像
(正解)

解説

SQLインジェクションは、悪意のあるユーザがWebアプリケーションに不正なSQL文を挿入し、不正アクセスや情報漏洩を引き起こす代表的な攻撃手法です。この攻撃を防ぐためには、Webアプリケーションの実装上の対策と、運用や環境面の対策の双方をしっかり行うことが重要です。

Webアプリケーションの実装における対策

最も一般的で効果的な対策は「プレースホルダ(バインド変数)を利用したSQL文の実行」です。
  • プレースホルダとは、SQL文中で変数が入る場所にあらかじめマークを置き、値は別途渡す方式です。
  • これにより、ユーザからの入力値が文字列として扱われ、SQL文の構造自体に影響を与えません。
  • 例えば、次のようなプレースホルダ付きSQL文を用います。
SELECT * FROM users WHERE user_id = ?\text{SELECT * FROM users WHERE user\_id = ?}
このとき、? の部分に直接文字列を埋め込むのではなく、専用のAPI経由で値を渡します。結果として、悪意あるSQLが意図せず実行されることを防ぎます。

Webアプリケーションの実装以外の対策

実装以外の段階でもSQLインジェクションのリスクを軽減できます。代表的なのは「データベースのアカウントがもつ権限を必要最小限に制限すること」です。
  • データベースに接続するアプリケーションのユーザアカウントが持つ権限を厳しく制限し、例えば読み込み専用や書き込み禁止に設定します。
  • これにより、万一SQLインジェクションが発生しても、攻撃者が行える操作を限定できます。
  • 最小権限の原則に基づいた運用で、被害の範囲を狭めることが狙いです。

なぜ他の選択肢は不適切か

  • 「Webアプリケーション中でシェルを起動しない」や「chroot環境でWebサーバを稼働させる」などはサーバの安全性向上には寄与しますが、SQLインジェクションへの直接的な防御策ではありません。
  • 「セッションIDを乱数で生成する」「TLSによって通信内容を秘匿する」は通信や認証に関する対策であり、SQLインジェクションとは対象が異なります。
  • 「パス名やファイル名をパラメタとして受け取らない」「重要なファイルを公開領域に置かない」もSQLインジェクション対策ではなく、ファイルの取り扱いやアクセス制御に関する対策です。

まとめ

SQLインジェクション対策として適切なのは、
  • 実装面: 「プレースホルダを利用してSQL文を組み立てる」こと
  • 実装以外: 「データベースのアカウント権限を必要最小限に制限する」こと
この両方を組み合わせることで、攻撃の発生を防ぎつつ万が一攻撃が成功しても被害を最小限に抑えられます。問題の正解は「エ」です。
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ