【问题标题】:display python script output in a web page [server running flask]在网页中显示 python 脚本输出 [服务器运行烧瓶]
【发布时间】:2017-01-15 12:01:59
【问题描述】:

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

这是我将参数传递给脚本并运行它的方式

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

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

如何将输出返回到新网页?

【问题讨论】:

  • 为什么不能导入这个脚本并运行呢?您不需要使用操作系统命令

标签: python azure flask flask-restful


【解决方案1】:

你可以使用 pipe ,它是这样做的

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

从安全角度来看,我建议您在使用之前对 postArguements 进行一些完整性检查

编辑:回答询问为什么要进行健全性检查的评论

代码容易被命令注入

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

让我尝试在您的情况下演示一种可能的攻击 如果

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 了解命令注入

【讨论】:

  • 您能解释一下您所说的“健全性检查”吗?
  • 在此处阅读有关命令注入的信息owasp.org/index.php/Command_Injection
  • @KalolParty 我已经用健全性检查的详细信息更新了答案。如果对您有帮助,请采纳答案
  • 谢谢!好东西!
  • 有没有其他方法可以避免这种情况?此外,它在我的本地服务器上运行,但不在我的 azure 服务器上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 2020-08-15
相关资源
最近更新 更多