令和7年度春期 応用情報技術者試験 午前 問42
Webアプリケーションソフトウェアの開発におけるOSコマンドインジェクション対策はどれか。
- ア SQL文の組立ては全てプレースホルダで実装する。
- イ シェルを起動できる言語機能を利用した実装を避ける。
- ウ 直接メモリにアクセスできる言語機能を利用した実装を避ける。
- エ 利用者が入力したファイル名にディレクトリが含まれていないかのエラーチェックを実装する。
解答・解説を見る
正解:イ
AI解説
OSコマンドインジェクションは、外部からの入力を使ってOSのシェルコマンドを実行させる攻撃である。根本的な対策は、system()やexec()のようなシェルを起動できる言語機能の利用そのものを避け、シェルを経由しない安全なAPI(直接プログラムを呼び出す関数など)を使用することである。 ア: 誤り。SQL文の組立てを全てプレースホルダで実装するのはSQLインジェクション対策であり、OSコマンドインジェクション対策とは異なる。 イ: 正しい。シェルを起動できる言語機能(system関数など)の利用を避けることが、OSコマンドインジェクションの根本的な対策となる。 ウ: 誤り。直接メモリにアクセスできる言語機能の利用を避けるのは、バッファオーバーフローなどメモリ関連の脆弱性対策であり、OSコマンドインジェクション対策とは異なる。 エ: 誤り。ファイル名にディレクトリが含まれていないかチェックするのは、ディレクトリトラバーサル対策であり、OSコマンドインジェクション対策そのものではない。 💡 脆弱性対策は「攻撃手法と対策技術を1対1で覚える」より、「危険な言語機能そのものを使わない」という設計方針(セキュアコーディングの基本原則)とセットで理解すると応用が利く。
※Web掲載用に表記を一部変更しています。著作権はIPAに帰属します。