(PHP 4, PHP 5, PHP 7, PHP 8)
escapeshellcmd — Экранировать метасимволы командной строки
$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().
Пробелы не будут экранированы с помощью escapeshellcmd(),
что может быть проблематичным в Windows с такими путями, как:
C:\Program Files\ProgramName\program.exe
.
Можно уменьшить проблему, используя следующий фрагмент кода:
<?php
$cmd = preg_replace('`(?<!^) `', '^ ', escapeshellcmd($cmd));