escapeshellcmd シェルのメタ文字をエスケープする &reftitle.description; stringescapeshellcmd stringcommand escapeshellcmd は、文字列中においてシェルコマンドを だまして勝手なコマンドを実行する可能性がある文字をエスケープします。 この関数は、ユーザーに入力されたデータを関数 exec または system または、 バッククォート演算子 に渡す前に全てエスケープを行う場合に使用するべきです。 &#;`|*?~<>^()[]{}$\\x0A および \xFF については、その文字の前にバックスラッシュが 追加されます。' および " は、対になっていない場合にのみエスケープされます。 Windows では、 これらの文字に加えて %! の前にキャレット (^) が付加されます。 &reftitle.parameters; command エスケープされるコマンド &reftitle.returnvalues; エスケープされた文字列 &reftitle.examples; <function>escapeshellcmd</function> の例 ]]> &reftitle.notes; escapeshellcmd はコマンド文字列全体に適用しなければなりません。 また、そうしたところで、まだ任意の数の引数を渡すことによる攻撃を許してしまいます。 単一の引数をエスケープするには、かわりに escapeshellarg を使わねばなりません。 スペースは escapeshellcmd 関数ではエスケープされません。 たとえば、Windows で問題になりがちな C:\Program Files\ProgramName\program.exe のようなパスが当てはまります。 この問題は以下のようなコードで緩和できます: &reftitle.seealso; escapeshellarg exec popen system バッククォート演算子