escapeshellcmd

(PHP 4, PHP 5, PHP 7, PHP 8)

escapeshellcmdЭкранирует метасимволы командной строки

Описание

escapeshellcmd(string $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));

Смотрите также

  • escapeshellarg() - Экранирует строку для передачи в качестве аргумента командной строки
  • exec() - Выполняет внешнюю программу
  • popen() - Открывает файловый указатель процесса
  • system() - Выполняет внешнюю программу и отображает вывод
  • Оператор исполнения