Python-Flask框架(四), 如何进行模板注入?
jinja2模板简介
Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全;
何为模板注入
模板引擎(SST)
模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
如果没有SST,那python和html就是写在一个文件里,python代码和html代码混合coding这个,可想而知啊。。。
可是SST又是危险的,因为SST十分相信用户的输入,并且执行这些内容,甚至是本机函数都可以执行。
模板注入(SSTI)
模板引擎通过使用代码构造(如条件语句、循环等)处理上下文数据,允许在模板中使用强大的语言表达式,以呈现动态内容。如果使用模板时并没用对用户的输入做任何处理或相信用户的输入,攻击者则可通过模板引擎执行系统命令,这就会造成模板注入。模板注入是可以防范的,下面会从攻 与 防进行介绍。
如何进行模板注入
flask后端代码
from flask import Flask, request, render_template_string
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>不在这里,我的朋友</h1>'
@app.route('/flag/')
def flag():
code = request.args.get('id')
html = '''
hello, do you have id ? , %s
''' % code
return render_template_string(