array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'pt_BR', ), 'this' => array ( 0 => 'function.escapeshellcmd.php', 1 => 'escapeshellcmd', ), 'up' => array ( 0 => 'ref.exec.php', 1 => 'Funções para Execução de programas', ), 'prev' => array ( 0 => 'function.escapeshellarg.php', 1 => 'escapeshellarg', ), 'next' => array ( 0 => 'function.exec.php', 1 => 'exec', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'pt_BR', 'path' => 'reference/exec/functions/escapeshellcmd.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
escapeshellcmd — Escapa metacaracteres shell
escapeshellcmd() escapa qualquer caractere em uma string que possa ser utilizada para enganar um comando shell para executar comandos arbritários. Esta função deve ser utilizada para ter certeza que quaisquer dados vindos do usuário são escapado antes que estes dados sejam passados para as funções exec() ou system(), ou para o operador crase.
Os seguintes caracteres são precedidos por uma barra invertida:
&#;`|*?~<>^()[]{}$\
, \x0A
e \xFF
. '
e "
são escapados apenas se não estiverem em pares. No windows, todos estes caracteres
mais %
e !
são precedidos por um circunflexo
(^
).
command
O comando que será escapado.
A string escapada.
Exemplo #1 Exemplo de escapeshellcmd()
<?php
// Permitindo número arbitrário de argumentos intencionalmente.
$command = './configure '.$_POST['configure_options'];
$escaped_command = escapeshellcmd($command);
system($escaped_command);
?>
escapeshellcmd() should be used on the whole command string, and it still allows the attacker to pass arbitrary number of arguments. For escaping a single argument escapeshellarg() should be used instead.
Spaces will not be escaped by escapeshellcmd()
which can be problematic on Windows with paths like:
C:\Program Files\ProgramName\program.exe
.
This can be mitigated using the following code snippet:
<?php
$cmd = preg_replace('`(?<!^) `', '^ ', escapeshellcmd($cmd));