Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对命令进行安全性分析_Python_Bash_Shell_Security_Filtering - Fatal编程技术网

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

Python 如何对命令进行安全性分析,python,bash,shell,security,filtering,Python,Bash,Shell,Security,Filtering,我正在用Python制作一个Discord机器人。我在我的shell上安装了一些很酷的命令,比如cowsay,我想在bot中实现这些命令,所以我在接近尾声时有以下代码: else: for i in bash_cmds: if digested.startswith(prefix + i): cmd =

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

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


我认为,取代的东西,如;s和s会起作用,但我想留下一些像$这样的东西,这样人们就可以使用cowsay$fortune,但这样人们就可以使用echo$ls。。。但我也不想过滤掉命令,因为: A.可能有办法解决这个问题
B我不想让我一天吃三顿饭变成一天吃三顿饭……

你可以吃一顿。然后,您可以创建一个.bash_配置文件,该配置文件将$PATH设置为一个目录,该目录仅包含希望由bot执行的bin。

听起来好像您希望调用类似于参数的内容,为什么这会被否决?我想这个问题实际上是如何清理终端输入以将输入限制为多个命令。我不知道它是否应该被否决,但问题可以缩小一点。我想你可以问我如何确保任何命令都是纯字符串,但我不确定我认为替换如下内容:;s和s会起作用,但我想留下一些像$这样的东西,这样人们就可以使用cowsay$fortune,但这样人们就可以使用echo$ls。。。但是我也不想过滤掉命令,因为:a。可能有办法解决这个问题,b。我不希望我一天吃三顿饭变成我一天吃三顿饭……您可以通过设置可执行关键字参数来更改popen使用的shell