PHP имеет 2 тесно связанных функции, escapeshellarg()
и escapeshellcmd()
. Они оба, кажется, делают подобные вещи, а именно, помогают сделать строку более безопасной использовать в system()
/exec()
/ и т.д.
Какой я должен использовать? Я просто хочу смочь взять некоторый ввод данных пользователем и выполнить команду на нем, и не иметь все аварийно завершаются. Если бы PHP имел исполнительную функцию типа, которая взяла массив строк (как argv), который обходит оболочку, то я использовал бы это. Подобный Python subprocess.call()
функция.
Из http://ie2.php.net/manual/en/function.escapeshellarg .php
escapeshellarg () добавляет одинарные кавычки. вокруг строки и кавычек / экранирования любых существующие одинарные кавычки, позволяющие передать строку прямо в оболочку функцию и рассматривать ее как единственный безопасный аргумент.
Escapeshellarg, как указывает его имя, используется как передаваемый аргумент (ы) оболочки. Например, вы хотите перечислить текущий каталог,
$dir = ".";
system('ls '.escapeshellarg($dir));
escapeshellcmd('ls $dir');
Оба делают аналогичные вещи и просто зависят от того, как вы обрабатываете свою логику, убедитесь, что вы нормализовали и подтвердили свой ввод, прежде чем переходить непосредственно к этим методам для большей безопасности.