现代Web,普遍采用视图与模型分离的技术开发程序,将用户提交的数据,作为参数带入到模板中进行渲染。开发者没有按照要求来编写模板代码,就可能会产生SSTI模板引擎漏洞。

SSTI服务端模板注入(Server-Side Template Injection):服务端接收了用户提交的恶意数据,导致敏感信息泄露、代码执行、getshell等问题。

几种开发模式的模型图

  1. MVC

    MVC简介

    Model View Controller

    经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。

    V即View视图是指用户看到并与之交互的界面。

    M即Model模型是指模型表示业务规则。

    C即Controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。

  2. MVP

    MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。

  3. MVVM

    MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。

一些重要的函数

Object 对象特殊属性

一些重要的模块

模块

常见模板引擎

  1. Java
    1. FreeMarker
    2. JSP
    3. Velocity
  2. Python
    1. jinjia2/flask
    2. django
    3. tornado
  3. PHP
    1. Smarty
    2. Twig
    3. Blade

Flask基础入门

  1. 安装FLASK

    pip install flask
    
  2. 最小的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应用
    

jinja2入门