Webアプリケーションの脅威と対策|情報セキュリティマネジメント 令和5年 公開問題 問7

出典:令和5年度 公開問題 科目A 問7 分野:セキュリティ / セキュリティ実装技術
Webアプリケーションにおけるセキュリティ上の脅威とその対策に関する記述のうち、適切なものはどれか。
  • ア:OSコマンドインジェクションを防ぐために, Webアプリケーションが発行するセッションIDに推測困難な乱数を使用する。
  • イ:SQLインジェクションを防ぐために,Webアプリケーション内でデータベースへの問合せを作成する際にプレースホルダを使用する。
  • ウ:クロスサイトスクリプティングを防ぐために,Webサーバ内のファイルを外部から直接参照できないようにする。
  • エ:セッションハイジャックを防ぐために,Webアプリケーションからシェルを起動できないようにする。
解説

SQLインジェクションは、Webアプリケーションへの入力値を悪用して、意図しないSQL文を実行させる攻撃です。対策としては、SQL文と入力値を分離して扱うプレースホルダを利用する方法が有効です。

SQLダウンロード

プレースホルダを使うと、利用者が入力した文字列をSQL文の一部として解釈させず、単なるデータとして扱えます。そのため、SQL文を不正に書き換えられるリスクを低減できます。したがって、が適切です。

❌他選択肢が誤りの理由
ア:OSコマンドインジェクションを防ぐために, Webアプリケーションが発行するセッションIDに推測困難な乱数を使用する。
⇒推測困難なセッションIDを使用する対策は、セッションハイジャックへの対策です。OSコマンドインジェクションは、入力値を介してOSコマンドを不正に実行させる攻撃なので、セッションIDとは直接関係しません。
ウ:クロスサイトスクリプティングを防ぐために,Webサーバ内のファイルを外部から直接参照できないようにする。
⇒クロスサイトスクリプティング(XSS)は、利用者の入力などに含まれたスクリプトをWebページ上で実行させる攻撃です。対策としては、出力時にHTMLの特殊文字をエスケープするなどの処理が重要です。ファイルの直接参照を防ぐこととは別の対策です。
エ:セッションハイジャックを防ぐために,Webアプリケーションからシェルを起動できないようにする。
⇒WebアプリケーションからシェルやOSコマンドを実行できないようにする対策は、OSコマンドインジェクションへの対策です。セッションハイジャックでは、セッションIDの盗難や推測を防ぐ対策が必要です。
TSUNAGARU-ADVICE

まず押さえたいこと

SQLインジェクションは、入力値を悪用して意図しないSQL文を実行させる攻撃です。対策として、SQL文を組み立てるときにプレースホルダを使用して、SQLの構造と入力値を分離することが有効です。

迷ったときの判断軸

攻撃名と対策を正しく対応付けましょう。セッションIDを推測困難にするのはセッションハイジャック対策、シェルを起動させないことはOSコマンドインジェクション対策に関係します。クロスサイトスクリプティングでは、出力時のエスケープ処理などが基本です。SQLインジェクションならプレースホルダと結び付けて覚えましょう。

科目Bにつなげるために

科目Bでは、Webアプリケーションの入力値がどの処理に渡されるかを追い、攻撃手口と対策を対応付ける力が重要です。入力値をそのままSQL文やOSコマンドとして解釈させないという考え方を軸に、SQLインジェクション・OSコマンドインジェクション・XSSなどを整理しておきましょう。