この概念が出た関連問題

この試験の対策ガイド

情報処理安全確保支援士試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は イ

解説

OSコマンドインジェクションとは、Webアプリがユーザー入力を使ってOSコマンドを実行する際に、悪意ある入力によって意図しないコマンドを実行させる攻撃です。最も根本的な対策は「シェルを起動できる言語機能の使用を避ける」(選択肢b)ことです。例えばPythonのos.system()・subprocess.shell=True、PHPのexec()・passthru()、Javaのruntime.exec()にシェル経由オプションを使う実装を避けます。シェルを起動しない関数(subprocess.run(shell=False)等)を使用するか、OSコマンド呼び出し自体を設計から排除することが最善の対策です。

なぜ他の選択肢は違うのか

選択肢 ア
SQLプレースホルダはSQLインジェクション対策です。OSコマンドインジェクションはSQLとは無関係であり、プレースホルダでは防げません。
選択肢 ウ
直接メモリアクセスの制限はバッファオーバーフロー(メモリ破壊系)の対策です。OSコマンドインジェクションはメモリの問題ではなく、コマンド実行の問題です。
選択肢 エ
ファイル名のディレクトリチェックはパストラバーサル攻撃(ディレクトリトラバーサル)の対策です。「../../etc/passwd」のような攻撃を防ぎますが、OSコマンドインジェクションとは別の攻撃です。

解くときのポイント

各攻撃と対策の対応:OSコマンドインジェクション→シェル機能を使わない、SQLインジェクション→プレースホルダ、パストラバーサル→ディレクトリチェック、バッファオーバーフロー→メモリ安全な言語。混同しないよう整理する。