LaravelConf Taiwan 2020 CFP Started

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() を使わねばなりません。

変更履歴

バージョン 説明
5.4.43, 5.5.27, 5.6.11 感嘆符がスペースで置き換えられるようになりました。
5.3.0 Windows で、特別な文字が適切にエスケープされるようになりました。 これより前のバージョンでは、そうした文字はスペースで置き換えられていました。

参考

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top