Python-Flask框架(四), jinja2模板注入

本文介绍了Jinja2模板引擎的基础知识,强调了模板注入(SSTI)的安全风险。通过示例展示了如何进行模板注入,并提出防范措施,包括避免使用`%s`和`render_template_string`,不直接使用`safe`过滤器,以及使用HTML转义和自定义过滤器来保护应用免受SSTI攻击。
摘要由CSDN通过智能技术生成

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(
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

99Kies

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值