我在Azure服务器上运行flask并使用POST从表单发送数据,作为python脚本的参数。
以下是我如何将参数传递给脚本并运行它
os.system("python3 script.py " + postArgument)
输出正常显示在日志中,就像在终端上一样。
如何将输出恢复到新网页?
答案 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