C プログラムから、ファイル名をパラメータとしてシェル スクリプトを呼び出したいと考えています。ユーザーはファイル名を制御できます。Cは次のようなものです(初期化/エラーチェックは省略):
sprintf(buf, "/bin/sh script.sh \"%s\"", filename);
system(buf);
ターゲット デバイスは実際には組み込みシステムなので、悪意のあるユーザーを心配する必要はありません。明らかに、これは Web 環境での攻撃ベクトルになります。それでも、たとえば名前に逆引用符が含まれるファイル名がシステムにある場合、シェルが名前の展開を実行するため、コマンドは失敗します。コマンド置換を防ぐ方法はありますか?