SQLインジェクション対策|情報処理安全確保支援士試験 令和5年春期午前Ⅱ 問17

出典:令和5年春期 午前Ⅱ 問17 分野:セキュリティ / セキュリティ実装技術
SQLインジェクション対策について,Webアプリケーションプログラムの実装における対策と,Webアプリケーションプログラムの実装以外の対策の組みとして,適切なものはどれか。
Webアプリケーションプログラムの実装における対策 Webアプリケーションプログラムの実装以外の対策
Webアプリケーションプログラム中でシェルを起動しない。 chroot環境でWebサーバを稼働させる。
セッションIDを乱数で生成する。 TLSによって通信内容を秘匿する。
パス名やファイル名をパラメータとして受け取らないようにする。 重要なファイルを公開領域に置かない。
プレースフォルダを利用する。 Webアプリケーションプログラムが利用するデータベースのアカウントがもつデータベースアクセス権限を必要最小限にする。
  • ア: 
  • イ: 
  • ウ: 
  • エ: 
解説

SQLインジェクションは、入力値に不正なSQL文を含め、Webアプリケーションが意図しないSQLをデータベースに実行させる攻撃です。

Webアプリケーションプログラムの実装における対策としては、プレースホルダを利用して、入力値をSQL文の一部として直接連結しないようにすることが有効です。

また、実装以外の対策として、Webアプリケーションが利用するデータベースアカウントの権限を必要最小限にしておくと、SQLインジェクションが発生した場合でも被害範囲を抑えられます。

したがって、が適切です。

❌他選択肢が誤りの理由
ア:Webアプリケーションプログラム中でシェルを起動しない。/chroot環境でWebサーバを稼働させる。
⇒OSコマンドインジェクションなどへの対策です。シェルを起動しないことは、外部入力からOSコマンドを実行されるリスクを下げる対策であり、SQL文の不正実行を防ぐSQLインジェクション対策とは観点が異なります。
イ:セッションIDを乱数で生成する。/TLSによって通信内容を秘匿する。
⇒セッション管理や通信盗聴への対策です。セッションIDを推測されにくくしたり、通信内容を暗号化したりする効果はありますが、不正なSQL文がデータベースに渡されることを防ぐ対策ではありません。
ウ:パス名やファイル名をパラメータとして受け取らないようにする。/重要なファイルを公開領域に置かない。
⇒ディレクトリトラバーサルなどへの対策です。ファイルパスを悪用した不正アクセスを防ぐ対策であり、SQL文の組立てやデータベース権限に関するSQLインジェクション対策ではありません。
TSUNAGARU-ADVICE

まず押さえたいこと

SQLインジェクション対策では、SQL文を文字列連結で組み立てず、プレースホルダを利用してSQL文の構造と入力値を分離することが重要です。

迷ったときの判断軸

SQLインジェクションは、利用者入力がSQL文の一部として解釈されることで発生します。実装上はプレースホルダを使い、実装以外ではデータベースアカウントの権限を必要最小限にすることで、攻撃の成立防止と被害範囲の限定を組み合わせて考えます。

科目Bにつなげるために

科目Bでは、脆弱性対策について、根本対策と被害軽減策を分けて問われることがあります。SQLインジェクションでは、入力値をSQLとして解釈させない対策と、万一攻撃された場合に不要な表や操作へアクセスさせない権限管理をセットで押さえておきましょう。