問42 OS コマンドインジェクション対策

応用情報​技術者試験 令和7年度 春期 午前、全80問のうちの問42。

出典:令和7年度 春期 応用情報技術者試験 午前 問42

Web アプリケーションソフトウェアの開発における OS コマンドインジェクション対策はどれか。

  1. アSQL 文の組立ては全てプレースホルダで実装する。
  2. イシェルを起動できる言語機能を利用した実装を避ける。
  3. ウ直接メモリにアクセスできる言語機能を利用した実装を避ける。
  4. エ利用者が入力したファイル名にディレクトリが含まれていないかのエラーチェックを実装する。
答えと解説を開く

正解はイです。

OS コマンドインジェクションは、Web アプリケーションが利用者の入力を組み込んで OS のコマンドを実行するとき、入力に「; rm」のような記号とコマンドを紛れ込ませて、作り手の意図しないコマンドをサーバで動かす攻撃です。シェルは「;」や「|」などの記号を、コマンドの区切りやつなぎとして解釈するため、これが起きます。そもそもシェルを起動する言語機能を使わなければ、記号が解釈されることはありません。正解はイです。

ほかの選択肢が違う理由

  • アSQL 文をプレースホルダで組み立てるのは、SQL インジェクションの対策です。
  • ウメモリに直接触れる機能を避けるのは、バッファオーバーフローの対策です。
  • エファイル名にディレクトリが入っていないかを確かめるのは、「../」などで公開していないファイルを読ませるディレクトリトラバーサルの対策です。

仕組み

シェルを起動する機能をどうしても使うときは、入力に使える文字を許可した物だけに絞る、記号を無害な形に置き換える (エスケープ) などの対策を重ねます。

インジェクションの攻撃は、データとして渡したつもりの入力が、命令として解釈されることで起きます。SQL でも OS のコマンドでも、データと命令を分けて渡すのが基本の守り方です。

この問に出る言葉