现代Web,普遍采用视图与模型分离的技术开发程序,将用户提交的数据,作为参数带入到模板中进行渲染。开发者没有按照要求来编写模板代码,就可能会产生SSTI模板引擎漏洞。
SSTI服务端模板注入(Server-Side Template Injection):服务端接收了用户提交的恶意数据,导致敏感信息泄露、代码执行、getshell等问题。
MVC
MVC简介
Model View Controller
经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。
V即View视图是指用户看到并与之交互的界面。
M即Model模型是指模型表示业务规则。
C即Controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。
MVP
MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。
MVVM
MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。
安装FLASK
pip install flask
最小的Flask应用
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
from flask import Flask
导入Flask类,该类的实例将会称为我们的WSGI应用
WSGI (Python Web Server Gateway Interface)
Pyhon Web服务器网关接口
app = Flask(__name__)
传入 __name__ 是为了告诉Flask应该去何处查找模板、静态资源
__name__ 会因为程序的构建目录变化而变化
@app.route('/')
flask装饰器 用于处理URL请求
def hello_world() @app.route('/')处理URL请求,hello_world()表示如何去处理请求
if __name__ == '__main__':
app.run()
只在该文件中才会启动flask应用