令和元年度 秋期 情報処理安全確保支援士試験 午前Ⅱ 問17
テクノロジ/セキュリティSQL インジェクション対策について,Web アプリケーションプログラムの実装における対策と,Web アプリケーションプログラムの実装以外の対策として,ともに適切なものはどれか。
出典:令和元年度 秋期 情報処理安全確保支援士試験 午前Ⅱ 問17
- ア実装における対策:Web アプリケーションプログラム中でシェルを起動しない。,実装以外の対策:chroot 環境で Web サーバを稼働させる。
- イ実装における対策:セッション ID を乱数で生成する。,実装以外の対策:TLS によって通信内容を秘匿する。
- ウ実装における対策:パス名やファイル名をパラメータとして受け取らないようにする。,実装以外の対策:重要なファイルを公開領域に置かない。
- エ実装における対策:プレースホルダを利用する。,実装以外の対策:Web アプリケーションプログラムが利用するデータベースのアカウントがもつデータベースアクセス権限を必要最小限にする。
正解:エ
解説
SQL インジェクション対策は,Web アプリケーションプログラムの実装における対策と,実装以外(インフラやミドルウェアの設定など)の対策とに分けて考えることができます。実装における対策としては,SQL 文の組立てにプレースホルダ(バインド機構)を利用し,入力値をパラメータとして安全にバインドすることで不正な SQL 文の混入を防ぐことが基本です。一方,実装以外の対策としては,Web アプリケーションプログラムが利用するデータベースアカウントに付与するデータベースアクセス権限を必要最小限に絞ることで,仮に SQL インジェクションが成立してしまった場合でも被害を最小限に抑える,多層防御の考え方が有効です。
選択肢ごとの解説
- ア誤り。シェルを起動しないことは OS コマンドインジェクション対策,chroot 環境での稼働はプロセスの隔離によるサーバ侵害後の被害限定策であり,いずれも SQL インジェクション対策として直接適切なものではありません。
- イ誤り。セッション ID を乱数で生成することはセッションハイジャック対策,TLS による通信の秘匿は盗聴対策であり,いずれも SQL インジェクション対策ではありません。
- ウ誤り。パス名やファイル名をパラメータとして受け取らないことはディレクトリトラバーサル対策,重要なファイルを公開領域に置かないこともディレクトリトラバーサルやファイル漏えい対策であり,いずれも SQL インジェクション対策ではありません。
- エ正しい。実装における対策としてプレースホルダを利用すること,実装以外の対策としてデータベースアカウントの権限を必要最小限にすることは,ともに SQL インジェクション対策として適切です。