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