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