如何使用python执行linux grep?我目前的尝试是
output = subprocess.run(
"/bin/grep " + query,
cwd=path_to_files,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
shell=True
)
哪个工作。但是,问题在于查询可以包含不受信任的命令(例如,如果它们在查询中附加了分号,则除了初始grep之外,它们还可以运行第二条命令)。我如何安全地接受用户对grep命令的输入?
答案 0 :(得分:1)
使用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
来阻止用户超过给定文件,也可以修改代码以检查用户将打开哪个文件。