escapeshellcmd
(PHP 4, PHP 5, PHP 7, PHP 8)
escapeshellcmd — Escapa meta-caracteres shell
Descrição
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
(^
).
Parâmetros
command
-
O comando que será escapado.
Valor Retornado
A string escapada.
Exemplos
Example #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);
?>
Notas
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));
Veja Também
- escapeshellarg() - Escapa uma string para ser usada como um argumento shell
- exec() - Executa um programa externo
- popen() - Abre um processo como ponteiro de arquivo
- system() - Executa um programa externo e mostra a saída
- operador crase