(PHP 4, PHP 5, PHP 7, PHP 8)
escapeshellcmd — Escapa meta-caracteres 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 de execução.
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() deve ser usada na string de comando inteira, e ainda assim permite ao intruso passar um número arbitrário de argumentos. Para escapar um único argumento, a função escapeshellarg() deve ser usada em seu lugar.
Espaços não serão escapados por escapeshellcmd(),
o que pode ser problemático em caminhos do Windows como:
C:\Program Files\ProgramName\program.exe
.
Isto pode ser mitigado usando-se o seguinte trecho de código:
<?php
$cmd = preg_replace('`(?<!^) `', '^ ', escapeshellcmd($cmd));