この概念が出た関連問題

この試験の対策ガイド

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

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

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

正解は エ

解説

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

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

選択肢 ア
「Webアプリケーション中でシェルを起動しない」はOSコマンドインジェクション対策であり、SQLインジェクション対策ではない。「chroot環境でWebサーバを稼働させる」もOSコマンドインジェクション時の被害限定策で、SQLインジェクションとは異なる脅威への対策。
選択肢 イ
「セッションIDを乱数で生成する」はセッションハイジャック・セッション固定攻撃への対策、「TLSによって通信内容を秘匿する」は盗聴対策であり、いずれもSQLインジェクションとは別の脅威への対策の組み合わせ。
選択肢 ウ
「パス名やファイル名をパラメータとして受け取らない」はディレクトリトラバーサル攻撃への対策、「重要なファイルを公開領域に置かない」もファイルアクセス制御対策であり、SQLインジェクション対策の説明ではない。

解くときのポイント

SQLインジェクション対策の階層: ①プレースホルダ/バインド変数(最も根本的)②WAFによるフィルタリング③DBアカウントの権限最小化④エラーメッセージの非表示⑤ログ監視。