【攻防世界】十四 --- Web_python_template_injection --- SSTI

本文详细介绍了服务器端模板注入(SSTI)的概念,以Flask框架为例,阐述了模板注入的原理和利用方式,包括如何通过模板注入执行命令和读写文件。同时,给出了防范措施,提醒开发者在使用`render_template_string()`时注意用户输入的安全性。
摘要由CSDN通过智能技术生成

题目 — Web_python_template_injection

考点:SSTI(服务器模板注入)

一、知识点

1. 何为模板注入
  • 模板引擎可以让(网站)程序实现 界面 与 数据 分离业务代码逻辑代码 的分离,这大大提升了开发效率,良好的设计也使得代码重用变得更加容易。
  • 但是模板引擎也拓宽了我们的攻击面。注入到模板中的代码可能会引发 RCE 或者 XSS
2. flask基础
(1)路由
from flask import flask

@app.route('/index/')  
def hello_world():
    reutrn 'hello world'

# route装饰器的作用是将  函数  和  URL 绑定起来,
# 代码的作用就是当你访问http://127.0.0.1:5000/index的时候,flask会返回hello word
(2)渲染方法
  • flask的渲染方法有:render_template()render_template_string()
  • render_template(index.html) ---- 渲染指定的文件
  • render_template_string(html) ---- 渲染一个字符串,html是一个字符串SSTI 的产生和这个方法密切相关
(3)模板
  • flask 使用 Jinja2 (Jinja2 是基于 python 的模板引擎)(模板引擎:为了使 用户界面 与 业务数据 分离而产生的)作为渲染的引擎
  • 在网站根目录下新建 templates文件夹(它下面有一个index.html文件) ,用来存放html文件。也就是模板文件。
  • 这里有一个 test.py文件
from flask import Flask,redirect,render_template,render_template_string

@app.route('/index/')
def user_login():
    return render_template('index.html')

# 用户访问 http://127.0.0.1/index/ ,flask 就会渲染出 index.html 文件(/templates/index.html)
  • 模板文件不是单纯的html代码,模板文件中是可以传参的。比如下面的例子
from flask import Flask,redirect,render_template,render_template_string

@app.route('/index/')
def user_login():
    return render_template('index.html',content='This is index page.')  
# content 就是给模板文件中传入的参数。模板文件中是这样接收参数的:<h1>{
   {conte
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值