如何对命令进行安全性分析

2024-04-20 10:59:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python制作一个不和机器人。我在shell上安装了一些很酷的命令(比如cowsay),我想在bot中实现这些命令,因此我在结尾处有以下代码:

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)之类的事情了。。。但我也不想过滤掉命令,因为: a、 可能有办法解决这个问题 b、 我不想I eat 3 meals a day变成I eat three mea a day。。。你知道吗


Tags: 命令echocmdbash消息prefixfoomsg