OSコマンドインジェクション対策|科目A-1(応用情報技術者) 令和7年 春期午前試験 問42
出典:令和7年春期 午前 問42
分野:セキュリティ / セキュリティ実装技術
Webアプリケーションソフトウェアの開発におけるOSコマンドインジェクション対策はどれか。
- ア:SQL文の組立ては全てプレースホルダで実装する。
- イ:シェルを起動できる言語機能を利用した実装を避ける。
- ウ:直接メモリにアクセスできる言語機能を利用した実装を避ける。
- エ:利用者が入力したファイル名にディレクトリが含まれていないかのエラーチェックを実装する。
TSUNAGARU-ADVICE
まず押さえたいこと
OSコマンドインジェクションは、利用者の入力を組み込んでOSのシェルを呼び出したときに、不正なコマンドまで実行される脆弱性です。根本的な対策は、シェルを起動できる言語機能の利用を避け、目的に合った専用のAPIを使うことです。
迷ったときの判断軸
プレースホルダはSQLインジェクション、直接メモリにアクセスする機能の回避はバッファオーバーフローなどへの対策です。ファイル名にディレクトリが含まれるかを確認する対策は、主にディレクトリトラバーサルを意識したものです。攻撃名と、入力値が渡される処理を対応付けましょう。
科目Bにつなげるために
特に情報処理安全確保支援士試験合格を目指す方は、入力値の検証だけに頼らず、危険な機能を使用しない設計を優先する考え方を押さえましょう。やむを得ず外部コマンドを利用する場合は、引数の固定化・許可リスト方式・最小権限での実行も重要です。

OSコマンドインジェクションは、利用者から受け取った入力値をOSコマンドの一部として組み立てたときに、攻撃者が区切り文字や別のコマンドを混入させ、意図しないOSコマンドを実行させる攻撃です。
根本的な対策は、シェルを起動してOSコマンドを実行できる言語機能の利用を避け、ファイル操作などは言語やフレームワークが提供する専用のAPIで実装することです。
したがって、イが適切です。
❌他選択肢が誤りの理由ア:SQL文の組立ては全てプレースホルダで実装する。
⇒SQLインジェクションの対策です。利用者の入力値をSQL文の構造と分離し、不正なSQL文として解釈されることを防ぎます。
ウ:直接メモリにアクセスできる言語機能を利用した実装を避ける。
⇒バッファオーバーフローなどのメモリ破壊に関する脆弱性の対策です。OSコマンドの不正実行を直接防ぐ対策ではありません。
エ:利用者が入力したファイル名にディレクトリが含まれていないかのエラーチェックを実装する。
⇒ディレクトリトラバーサルの対策です。「../」などを用いて、公開を意図していないディレクトリやファイルへアクセスされることを防ぎます。