如何清理命令以确保安全



我正在用Python制作一个Discord机器人。我在 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)

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

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

如何过滤掉可能的恶意命令并允许邮件的未过滤部分成功?


我认为替换;s 和&s 之类的东西会起作用,但我想保留一些像$()这样的东西可用,以便人们可以使用cowsay $(fortune),但是这样人们就可以做像echo $(ls)这样的事情......但是我也不想过滤掉命令,因为: 一个。可能有办法绕过它, b.我不希望I eat 3 meals a day变成I eat three mea a day...

您可以使用受限制的 shell。然后,可以创建一个.bash_profile,将$PATH设置为仅包含机器人要执行的箱的目录。

听起来你想在参数上调用类似 https://docs.python.org/dev/library/shlex.html#shlex.quote 的东西

最新更新