В процессе использования 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
, чтобы запретить пользователю переходить выше указанного файла, или вы можете изменить свой код, чтобы иметь возможность проверять, какой файл откроет пользователь.