(PHP 4, PHP 5, PHP 7)
escapeshellcmd — シェルのメタ文字をエスケープする
$command
)escapeshellcmd() は、文字列中においてシェルコマンドを だまして勝手なコマンドを実行する可能性がある文字をエスケープします。 この関数は、ユーザーに入力されたデータを関数 exec() または system() または、 バックティック演算子 に渡す前に全てエスケープを行う場合に使用するべきです。
&#;`|*?~<>^()[]{}$\、\x0A および \xFF については、その文字の前にバックスラッシュが 追加されます。' および " は、対になっていない場合にのみエスケープされます。Windows では、 これらの文字に加えて % と ! がスペースに置き換えられます。
command
エスケープされるコマンド
エスケープされた文字列
例1 escapeshellcmd() の例
<?php
// 意図的に、任意の数の引数を指定できるようにしています
$command = './configure '.$_POST['configure_options'];
$escaped_command = escapeshellcmd($command);
system($escaped_command);
?>
escapeshellcmd() はコマンド文字列全体に適用しなければなりません。 また、そうしたところで、まだ任意の数の引数を渡すことによる攻撃を許してしまいます。 単一の引数をエスケープするには、かわりに escapeshellarg() を使わねばなりません。
バージョン | 説明 |
---|---|
5.6.0 |
encoding パラメータのデフォルト値が、
default_charset の設定値に変わりました。
|
5.4.43, 5.5.27, 5.6.11 | 感嘆符がスペースで置き換えられるようになりました。 |