在网页中显示python脚本输出[运行烧瓶的服务器]

时间:2017-01-15 12:01:59

标签: python azure flask flask-restful

我在Azure服务器上运行flask并使用POST从表单发送数据,作为python脚本的参数。

以下是我如何将参数传递给脚本并运行它

os.system("python3 script.py " + postArgument)

输出正常显示在日志中,就像在终端上一样。

如何将输出恢复到新网页?

1 个答案:

答案 0 :(得分:1)

你可以使用管道,这是如何完成的

os.popen("python3 script.py " + postArgument).read()

从安全角度来看,我建议您在使用

之前对postArguements进行一些完整性检查

编辑:回答评论,询问为何进行健全性检查

代码对于命令注入

是难以理解的
  

命令注入是一种目标执行的攻击   通过易受攻击的主机操作系统上的任意命令   应用。命令注入攻击是可能的   应用程序传递不安全的用户提供的数据(表单,cookie,HTTP   标题等)到系统shell。在这次攻击中,攻击者提供了   操作系统命令通常以权限执行   易受攻击的应用。命令注入攻击是可能的   很大程度上是由于输入验证不足。

让我试着在您的案例中展示可能的攻击 如果

postArgument = "blah ; rm -rf /"

然后

os.popen("python3 script.py " + postArgument).read()

将与

同等
os.popen("python3 script.py blah ; rm -rf /").read()

这将尝试删除系统中的所有文件。

如何避免这种情况 使用pipes.Quote

import pipes
p = os.popen("python3 script.py " + pipes.quote(postArgument)).read()

或使用subprocess,建议自os.popen被删除

import subprocess
p = subprocess.Popen(["python3", "script.py", postArguemnt])

阅读有关命令注入的here