如何对安全命令进行整理

时间:2018-02-11 02:13:59

标签: python bash shell security filtering

我正在用Python制作一个Discord bot。我在shell上安装了一些很酷的命令(比如cowsay),我希望将它们实现到机器人中,所以我的代码接近结尾:

else:                                                 
            for i in bash_cmds:
                if digested.startswith(prefix + i):
                    cmd = digested.replace(prefix, '')
                    msg = os.popen(cmd).read()
                    msg = '```' + msg + '```'
                    await client.send_message(channel, msg)

所以基本上,如果它以!! +我在数组["cowsay", "cowthink", "fortune", "echo"]中添加的任何BASh命令开始,那么在shell中执行命令。但是,这会带来一些安全问题。例如,可以写echo hackscript | bashnc -l 1337cat *rm *(您明白了)。

我已经启动了一个命令列表,我不希望在命令中出现这些命令。但是,我不希望出现错误,以防止无法看到消息的成功部分。 (如果有人放cowsay foo && ls,我仍然希望显示cowsay foo的输出。)

我如何能够过滤掉可能的恶意命令并允许未过滤的部分消息成功?

我认为替换;&之类的内容会有效,但我希望保留$()之类的内容,以便人们可以使用cowsay $(fortune),但是然后人们可以做echo $(ls)之类的事情...但我也不想过滤掉命令,因为: 一个。它可能有各种各样的方法 湾我不希望I eat 3 meals a day变成I eat three mea a day ...

2 个答案:

答案 0 :(得分:0)

您可以使用restricted shell。然后,您可以创建一个$PATH,将int设置为一个目录,该目录仅包含您希望由机器人执行的箱柜。

答案 1 :(得分:0)

听起来好像你想在论点

上调用类似https://docs.python.org/dev/library/shlex.html#shlex.quote的东西