SC情報処理安全確保支援士試験 午前Ⅰ

令和7年度春期 情報処理安全確保支援士 午前Ⅰ 問14

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

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

選択肢

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

午前I 問14:OSコマンドインジェクションを防ぐ考え方

外から受け取った文字をそのままOSコマンドにくっつけてシェルに渡すのは、知らない人にリモコンを渡して好きに操作させるようなものだよ。だから、入力チェックだけで何とかしようとせず、そもそもシェルを呼ばないAPIを使ったり、実行するコマンドや引数を固定したりして、安全な実行方法を選ぼう。

この問題で問われていること

ポイントは、「危ない入力をはじけばOK」と考えるだけでなく、「外部入力をコマンド文字列に混ぜてシェルに渡す」という危険な作り自体を避けられるかだよ。

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

`system()` やシェル経由実行に入力値を連結しない。

avoid shell invocation\nno string concatenation\nuse safe APIs

確認ポイント

  • SQL インジェクション対策と混同しない。
  • 入力値をコマンド文字列へ結合しない。
  • シェルを介さない実装を優先する。
正解と解説を見る

正解

イ

出典

問題文と解答は IPA 公開の過去問題冊子・解答例を基にしています。

選択肢ア

これは不正解だよ。プレースホルダはSQLインジェクション対策で、データベース窓口に『これは命令じゃなくてただの値だよ』と分けて渡す仕組みだよ。SQLには有効だけど、今回の話はOSのコマンド実行なので、守る窓口が違うんだ。

選択肢イ(正解)

これは正解だよ。OSコマンドインジェクションは、利用者の入力をシェルに渡してしまい、泥棒に店内放送のマイクを渡すように好きな命令を混ぜられる危険なんだ。だから、そもそもシェルを起動できる機能を使わない、または安全なAPIで決まった処理だけ実行するのが大事だよ。

選択肢ウ

これは不正解だよ。直接メモリを触れる機能を避けるのは、バッファオーバーフローみたいな『机から物がはみ出して隣の領域を壊す』タイプの事故を防ぐ考え方だよ。今回のOSコマンドインジェクションは、入力を命令文として実行される問題なので、狙っている危険が違うんだ。

選択肢エ

これは不正解だよ。これは、利用者に『../../secret.txt』みたいな抜け道つきのファイル名を入れられて、別の場所のファイルを読まれる攻撃への対策だね。建物でいうと、受付で『勝手に裏口へ回らないでね』とチェックする感じ。OSコマンドを勝手に実行される問題そのものへの中心的な対策ではないよ。

出典:独立行政法人 情報処理推進機構(IPA)令和7年度春期 情報処理安全確保支援士試験 午前Ⅰ 問14(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針