我正在用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 | bash
或nc -l 1337
或cat *
或rm *
(你明白了)。你知道吗
我已经开始列出我不想在命令中出现的命令。但是,我不希望出现错误来阻止消息的成功部分不被看到。(如果有人放了cowsay foo && ls
,我仍然希望cowsay foo
的输出出现。)
我怎样才能过滤掉可能的恶意命令并允许消息中未过滤的部分成功呢?你知道吗
我原以为替换;
和&
之类的东西会有用,但我想保留一些$()
之类的东西,这样人们就可以使用cowsay $(fortune)
,但这样人们就可以做echo $(ls)
之类的事情了。。。但我也不想过滤掉命令,因为:
a、 可能有办法解决这个问题
b、 我不想I eat 3 meals a day
变成I eat three mea a day
。。。你知道吗
你可以用restricted shell。然后可以创建一个
.bash_profile
,将$PATH
设置为一个目录,该目录只包含希望由bot执行的bin。你知道吗听起来你想在这个参数上调用https://docs.python.org/dev/library/shlex.html#shlex.quote
相关问题 更多 >
编程相关推荐