この概念が出た関連問題

この試験の対策ガイド

情報処理安全確保支援士試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は エ

解説

SQLインジェクションは、Webアプリケーションが利用者の入力値をSQL文に組み込む際の不備を突いて、攻撃者が不正なSQL文を実行させる攻撃です。本問は、Webアプリケーションプログラムの「実装における対策」と「実装以外の対策」の、両方とも適切な組合せを選ぶものです。実装における対策として最も有効なのは、プレースホルダ(バインド機構、プリペアドステートメント)を利用することです。プレースホルダは、SQL文の構造をあらかじめ確定させ、入力値をデータとしてのみ埋め込むため、入力値がSQL文として解釈される余地をなくし、SQLインジェクションを根本的に防げます。実装以外の対策としては、Webアプリケーションが利用するデータベースのアカウントがもつアクセス権限を必要最小限にすることが有効です。万一SQLインジェクションを受けても、権限が限定されていれば被害(情報漏えいやデータ改ざんの範囲)を最小化できます。選択肢dの「プレースホルダを利用する/データベースのアカウントのアクセス権限を必要最小限にする」が、両方とも適切な対策の組合せなので正解です。他の選択肢は、シェル起動の回避やchroot(OSコマンドインジェクションや権限分離の話)、セッションID生成やTLS(セッション管理や通信暗号化の話)、パス名の扱いやファイル配置(ディレクトリトラバーサルの話)であり、SQLインジェクションの直接の対策ではありません。

なぜ他の選択肢は違うのか

選択肢 ア
「シェルを起動しない/chroot環境でWebサーバを稼働させる」は、OSコマンドインジェクション対策や権限分離(chrootによる隔離)に関する対策です。SQLインジェクションの直接の対策ではなく、本問が問うSQLインジェクション対策の組合せとしては適切ではありません。OSコマンドインジェクション対策や権限分離(chrootによる隔離)に関するものであり、SQLインジェクションの直接の対策ではないため、本問の組合せとしては適切ではありません。
選択肢 イ
「セッションIDを乱数で生成する/TLSによって通信内容を秘匿する」は、セッション管理(セッションIDの推測防止)や通信の暗号化に関する対策です。これらはSQLインジェクションとは別の脅威への対策であり、SQLインジェクション対策の組合せとしては適切ではありません。セッションIDの推測防止や通信の暗号化に関する対策であり、これらはSQLインジェクションとは別の脅威への対策で、SQLインジェクション対策の組合せとしては適切ではありません。
選択肢 ウ
「パス名やファイル名をパラメタとして受け取らないようにする/重要なファイルを公開領域に置かない」は、ディレクトリトラバーサル(パス名を悪用してファイルへ不正アクセスする攻撃)対策に関するものです。SQLインジェクションの直接の対策ではないため、本問の組合せとしては適切ではありません。パス名を悪用してファイルへ不正アクセスするディレクトリトラバーサル対策に関するものであり、SQLインジェクションの直接の対策ではないため、本問の組合せとしては適切ではありません。

解くときのポイント

SQLインジェクション対策:実装=プレースホルダ(バインド機構)でSQL文の構造を固定。実装以外=DBアカウントの権限を必要最小限に(被害の最小化)。OSコマンドインジェクションやディレクトリトラバーサル対策と混同しない。