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