Python安全地执行用户输入grep命令

时间:2019-05-24 07:10:51

标签: python python-3.x grep subprocess

如何使用python执行linux grep?我目前的尝试是

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

哪个工作。但是,问题在于查询可以包含不受信任的命令(例如,如果它们在查询中附加了分号,则除了初始grep之外,它们还可以运行第二条命令)。我如何安全地接受用户对grep命令的输入?

1 个答案:

答案 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来阻止用户超过给定文件,也可以修改代码以检查用户将打开哪个文件。