Каково различие между escapeshellarg и escapeshellcmd?

PHP имеет 2 тесно связанных функции, escapeshellarg() и escapeshellcmd(). Они оба, кажется, делают подобные вещи, а именно, помогают сделать строку более безопасной использовать в system()/exec()/ и т.д.

Какой я должен использовать? Я просто хочу смочь взять некоторый ввод данных пользователем и выполнить команду на нем, и не иметь все аварийно завершаются. Если бы PHP имел исполнительную функцию типа, которая взяла массив строк (как argv), который обходит оболочку, то я использовал бы это. Подобный Python subprocess.call() функция.

37
задан tshepang 26 February 2014 в 17:47
поделиться

1 ответ

Из http://ie2.php.net/manual/en/function.escapeshellarg .php

escapeshellarg () добавляет одинарные кавычки. вокруг строки и кавычек / экранирования любых существующие одинарные кавычки, позволяющие передать строку прямо в оболочку функцию и рассматривать ее как единственный безопасный аргумент.

Escapeshellarg, как указывает его имя, используется как передаваемый аргумент (ы) оболочки. Например, вы хотите перечислить текущий каталог,

$dir = ".";
system('ls '.escapeshellarg($dir));
escapeshellcmd('ls $dir');

Оба делают аналогичные вещи и просто зависят от того, как вы обрабатываете свою логику, убедитесь, что вы нормализовали и подтвердили свой ввод, прежде чем переходить непосредственно к этим методам для большей безопасности.

4
ответ дан 27 November 2019 в 04:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: