Безопасное выполнение сценариев оболочки; выход из варса перед казнью - PullRequest
2 голосов
/ 12 апреля 2010

Давайте представим, что у нас есть простой php-скрипт, который должен получить ssh_host, ssh_username, ssh_port из массива $ _GET и попытаться подключиться с помощью этих параметров к SSH.

$port      = escapeshellcmd($_GET['ssh_port']);
$host      = escapeshellcmd($_GET['ssh_host']);
$username  = escapeshellcmd($_GET['ssh_username']);

$answer = shell_exec("ssh -p " . $port . " " . $user . "@" . $host);

Достаточно ли escapeshellcmd() или мне нужно что-то более хитрое? Или, может быть, я должен использовать escapeshellarg() в этом примере?

Спасибо.

1 Ответ

2 голосов
/ 12 апреля 2010

Я бы сказал, что это то, для чего была создана функция escapeshellarg - так что, чтобы избежать параметров, это то, что вы должны использовать.

В основном:

  • Чтобы экранировать один параметр, используйте escapeshellarg
  • А чтобы избежать команды в целом, используйте escapeshellcmd.


Цитируя их соответствующие документы:

escapeshellcmd ():
Эту функцию следует использовать, чтобы убедиться, что любые данные, поступающие от пользовательского ввода, экранированы до того, как эти данные будут переданы в функции exec() или system() или в оператор обратного удара.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...