escapeshellcmd
(PHP 4, PHP 5, PHP 7)
escapeshellcmd — シェルのメタ文字をエスケープする
説明
escapeshellcmd
( string $command
) : string
escapeshellcmd() は、文字列中においてシェルコマンドを だまして勝手なコマンドを実行する可能性がある文字をエスケープします。 この関数は、ユーザーに入力されたデータを関数 exec() または system() または、 バックティック演算子 に渡す前に全てエスケープを行う場合に使用するべきです。
&#;`|*?~<>^()[]{}$\
、\x0A
および \xFF
については、その文字の前にバックスラッシュが
追加されます。'
および "
は、対になっていない場合にのみエスケープされます。
Windows では、
これらの文字に加えて %
と !
の前にキャレット
(^
) が付加されます。
パラメータ
command
- エスケープされるコマンド
返り値
エスケープされた文字列
例
例1 escapeshellcmd() の例
<?php// 意図的に、任意の数の引数を指定できるようにしています$command = './configure '.$_POST['configure_options'];$escaped_command = escapeshellcmd($command); system($escaped_command);?>
警告 escapeshellcmd() はコマンド文字列全体に適用しなければなりません。 また、そうしたところで、まだ任意の数の引数を渡すことによる攻撃を許してしまいます。 単一の引数をエスケープするには、かわりに escapeshellarg() を使わねばなりません。
参考
- escapeshellarg() - シェル引数として使用される文字列をエスケープする
- exec() - 外部プログラムを実行する
- popen() - プロセスへのファイルポインタをオープンする
- system() - 外部プログラムを実行し、出力を表示する
- バックティック演算子