SSTI
模板引擎
SSTI 就是服务器端模板注入(Server-Side Template Injection)
Web开发中,模板引擎是为了使得用户界面和业务逻辑处理分离所产生。而SSTI的成因则是因为服务端没有对用户的输入做很好的处理而产生。
我们最常见到的模板语言便是jinja2,它是Flask框架一部分。它能够用于替换变量,将动态数据渲染到静态 HTML 页面。格式如下:
1 | 变量: |
通常在flask渲染html之前会有一个本地的html界面来作为模板,位于app.py同目录下的templates
之下,
这里给出示例:
1 | <html> |
其中hello是静态的,而被{{}}
包裹的name则可以被动态的替换,而执行这一替换逻辑就是app.py的任务。
我们给出以下示例代码:
1 | from flask import Flask, request, render_template |
除了用query = request.args.get(‘name’)来获取参数传递,也可以通过 URL 路径参数 (/<name>
) 获取。,该方法支持参数类型的限制,例如 <int:id>
。
模板注入
凡是使用模板的地方都可能会出现 SSTI 的问题,SSTI 不属于任何一种语言,沙盒绕过也不是
通常有很多各个语言的常见框架,不同模板则有着不同的语法,总结如下:
附表