(PHP 4, PHP 5, PHP 7, PHP 8)
escapeshellcmd — Protege los caracteres especiales del Shell
escapeshellcmd() escapa todos los
caracteres de la cadena command
que podrían tener un significado especial en una
orden Shell. Esta función permite asegurarse de que la orden será
correctamente pasada al ejecutor de órdenes Shell
exec() y system(), o incluso
a comillas invertidas.
Los siguientes caracteres serán escapados:
&#;`|*?~<>^()[]{}$\
, \x0A
y \xFF
. '
y "
son escapados solo si no están en pares. En Windows, todos estos caracteres
así como %
y !
son precedidos por
un circunflejo (^
).
command
La orden a escapar.
La cadena escapada.
Ejemplo #1 Ejemplo con escapeshellcmd()
<?php
// Se permiten intencionalmente un número arbitrario de argumentos aquí.
$command = './configure '.$_POST['configure_options'];
$escaped_command = escapeshellcmd($command);
system($escaped_command);
?>
La función escapeshellcmd() debe ser utilizada sobre toda la cadena de orden, y permite a personas malintencionadas pasar un número arbitrario de argumentos. Para escapar un solo argumento, la función escapeshellarg() debería ser utilizada en su lugar.
Los espacios no son escapados por escapeshellcmd()
lo cual puede ser problemático en Windows con rutas como:
C:\Program Files\ProgramName\program.exe
.
Esto puede ser mitigado utilizando el siguiente fragmento de código:
<?php
$cmd = preg_replace('`(?<!^) `', '^ ', escapeshellcmd($cmd));