linux, разрешить пользователю только одну команду с изменяемой переменной

У меня есть 2 сервера. Первый веб-сервер другой сервер Linux.
На веб-сервере я пишу скрипт php, который подключается к серверу linux, и запускаю команду после ввода пользователя. И в этом случае команда, которая выполняется на сервере Linux, не такая же. Например:

<input type="text" name="input">

….

$user_input = $_POST["input"]

….

if (!($stream = ssh2_exec($con, "cat $user_input | grep some_text"))) {
echo "fail: unable to execute command\n";
}

Теперь я должен разрешить пользователю только одну команду с изменяемой переменной. Пользователь может дать только для отл. команды «cat» и «grep», но «$ user_input» меняется каждый раз.
Есть ли способ решить ситуацию?

0

Решение

В зависимости от вашего кода …

cat $user_input | grep some_text

…вам, вероятно, нужно ограничить пользовательский ввод одним конкретным путем к файлу или / и может быть включен с некоторыми дополнительными cat параметры.

В этом случае вам нужно «сжечь» одну-единственную команду в вашем исходном коде и очистить / проверить ввод пользователя, чтобы избежать внедрения других команд, например:

$user_input = "/dev/null; rm -rf /"

В этом случае вы должны создать многошаговую проверку для проверки различных аспектов пользовательского ввода, чтобы выяснить, действительно ли это путь. Например, некоторые регулярные выражения, чтобы проверить, является ли это типичным синтаксисом пути. Вы также можете попробовать pathinfo() как часть вашей проверки, чтобы увидеть, есть ли какой-то действительный вывод. Наконец, очень сложно получить 100% -ную защиту, если пользовательский ввод содержит только имя файла.

Смотри сюда: Определите через C #, является ли строка допустимым путем к файлу

0

Другие решения

Единственный надежный (и относительно безопасный) способ, который мне известен, — это делать это с помощью шаблонов команд.

Концепция. Веб-интерфейс не допускает произвольных команд. Вместо этого он предоставляет список возможных шаблонов команд с проверенными / введенными параметрами. В веб-интерфейсе пользователь может выбрать шаблон и указать параметры. Выбранный шаблон и параметры затем передаются на сервер, инкапсулируются (например, в проверенный XML). Серверная часть сначала проверяет, что параметры, предоставленные пользователем, соответствуют шаблону, затем составляет команду и только затем выполняет ее.

Например, используя ваш фрагмент кода, возможная спецификация шаблона может выглядеть следующим образом:

grep-file ::= cat <local-readable-file> | grep <safe-text>

Для local-readable-file Проверка параметров может быть, например, в том, что имя файла содержит только безопасные символы, файл является обычным, находится в локальной файловой системе, доступен для чтения любому. Для safe-textНапример, он содержит только буквенно-цифровые символы.

0

По вопросам рекламы [email protected]