正答2
解説
正解は2です。
OSコマンドインジェクションは、Webアプリケーションが外部からの入力を使ってOSコマンドを組み立てる場合に、攻撃者が任意のコマンドを実行させる攻撃です。
根本的な対策は、シェルを起動する機能をそもそも使わない実装にすることです。
【選択肢別解説】
1:× SQL文をプレースホルダで組み立てるのは、SQLインジェクションの根本的な対策です。
OSコマンドの実行には関係しません。
2:○ シェルを起動できる関数(system関数やexec関数など)を使わなければ、入力にコマンドを紛れ込ませても実行されません。
どうしても使う場合は、引数を許可した文字だけに限定するなどの対策をとります。
3:× 直接メモリにアクセスできる言語機能を避けるのは、バッファオーバーフローの対策です。
OSコマンドインジェクションの対策ではありません。
4:× 利用者が入力したファイル名にディレクトリが含まれていないかを確認するのは、ディレクトリトラバーサルの対策です。
「../」などで意図しないファイルにアクセスされるのを防ぎます。
【ポイント】
インジェクション系の根本対策は、SQLはプレースホルダ、OSコマンドはシェルを起動しない実装、と対で覚えましょう。
入力値のチェック(エスケープ)は、根本対策を補う保険的な対策と位置付けられます。