Безопасный запуск сценариев оболочки; избегать варов до исполнения

Представим себе, что у нас есть простой скрипт 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); 

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

Спасибо.

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

    В основном :

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

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

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

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