Python для безопасного выполнения ввода пользователем команд grep - PullRequest
2 голосов
/ 24 мая 2019

Как мне выполнить linux grep, используя python?Моя текущая попытка следующая

    output = subprocess.run(
        "/bin/grep " + query,
        cwd=path_to_files,
        stdout = subprocess.PIPE,
        stderr = subprocess.PIPE,
        shell=True
    )

, которая работает.Проблема, однако, заключается в том, что запрос может включать ненадежные команды (например, если они добавляют точку с запятой в запросе, они могут выполнить вторую команду в дополнение к начальному grep).Как я могу безопасно принимать пользовательские данные для команды grep?

1 Ответ

1 голос
/ 24 мая 2019

В процессе использования shell=True, вы можете отправить список на subprocess.run.

import shlex

output = subprocess.run(
    ["/bin/grep "] + shlex.split(query),
    cwd=path_to_files,
    stdout = subprocess.PIPE,
    stderr = subprocess.PIPE
)

Этот код не позволяет использовать ; для инъекции оболочки.

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

...