正解は エ
SQLインジェクション対策には「Webアプリケーション実装上の対策」と「実装以外の対策」がある(d:正解)。プログラム実装上の対策:プレースホルダ(バインド変数)を利用することでSQL文の構造を固定し、ユーザ入力値がSQLコードとして解釈されることを防ぐ(最も根本的な対策)。プログラム実装以外の対策:Webアプリケーションが利用するデータベースアカウントの権限を最小限にする(最小権限の原則:必要最小限のテーブルへのSELECT/INSERT等のみ)。万一SQLインジェクションが成功しても、権限が最小限であれば被害範囲を限定できる。他の組み合わせの誤り:a(シェル起動しない/chroot)はOSコマンドインジェクション対策、b(セッションID乱数化/TLS)はセッション管理・盗聴対策、c(パス名パラメータ受取り禁止/重要ファイルを非公開)はディレクトリトラバーサル対策。
SQLインジェクション対策の階層: ①プレースホルダ/バインド変数(最も根本的)②WAFによるフィルタリング③DBアカウントの権限最小化④エラーメッセージの非表示⑤ログ監視。