ssti模板注入

一、Flask应用

1、介绍

  • 定义
Flask:是一个使用Python编写的轻量级web应用框架。Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。
  • 特点

良好的文档、丰富的插件、包含开发服务器和调试器、集成支持单元测试、RESTful请求调度、支持安全cookies、基于Unicode。

  • 用处

Python可以直接用flask启动一个web服务页面。

2、flask基本框架

(在python的venv虚拟环境运行)

from flask import Flask    #启动flask模块,创建一个Flask类
app = Flask(__name__)    #__name__系统变量,指的是py文件的文件名(相当于反序列化中的魔术方法)

@app.route('/')    #路由,相当与路径
def lin1():
    return "sb"

if __name__=='__main__':    #只能被python直接运行,不能作为组件或模块被调用
    app.run()

运行

运行后发现需要去浏览器查看(由于是127.0.0.1所以只能在虚拟机上的浏览器查看,没法在主机查看)

 要在本机上运行,需要改变运行的host

from flask import Flask    #启动flask模块,创建一个Flask类
app = Flask(__name__)

@app.route('/lin1')    #将路径指向lin1
def lin1():
    return "sb"
@app.route('/lin2')
def lin2():
    return "2b"

if __name__=='__main__':
    app.run(debug=True,host="172.16.17.29",port=6000)
    #debug=True:改完文件的配置可以自动生效(建议只在学习中开启,实战有漏洞,导致命令执行)
    #host="172.16.17.29",port=6666:将网址改为172.16.17.29端口改为80使得能在本机上运行

运行

 可以看到访问的地址改变了,且debug已启动(PIN码为562-864-305)

访问lin1

访问lin2

 3、flask变量规则

构建动态url

from flask import Flask   
app = Flask(__name__)

@app.route('/lin1/<name>')    
def lin1(name):    #传入字符型参数name
    return "sb %s" % name

@app.route('/lin2/<int:yourid>')
def lin2(yourid):    #传入整数型参数yourid
    return "id %d" % yourid


@app.route('/lin2/<int:yourmoneny>')
def lin2(yourmoneny):    #传入浮点型参数yourmoneny
    return "id %.2f" % yourmoneny 
  
if __name__=='__main__':
    app.run(debug=True,host="172.16.17.29",port=6000)

效果:

 

4、flask的http方法

扩展:

方法 用法
POST 用于向指定资源提交数据进行处理请求,例如提交表单或上传文件。数据被包含在请求体中,可能导致新的资源建立或原有资源修改。
GET 请求指定的页面信息,并返回实体内容。
HEAD 类似于GET,只不过返回的响应中没有具体的内容,仅传输状态行和标题部分,用于获取报头信息。
PUT 从客户端向服务器传送的数据取代指定的内容,即向指定的位置上传最新的内容。
DELETE

请求服务器删除Request-URL所标识的资源。

简单的登入界面

新创建一个templates文件夹,在里面放入一个html文件

<html>
    <body>
        <form action = "http://172.16.17.29:6000/login" method = "post">
            <p>Your Name</p>
            <p><input type = "text" name = "name"></p>
            <p><input type = "submit" value = "submit"></p>
        </form>
    </body>
</html>

开始构造flask框架

from flask import Flask,request,redirect,url_for,render_template
import requests
app = Flask(__name__)

@app.route('/')    #登录页面(‘/’)
def index():
    return render_template("index.html")    
#render_template:根据传入的参数和变量,替换模板文件中的占位符,并返回最终的 HTML 内容给客户端。

@app.route('/user/<name>')    #用户页面(‘/user/’)
def user(name):
    return "hello %s" % name

@app.route('/login',methods = ['GET','POST'])    #可以用POST方法也可以用GET方法
def login():
    if request.method == 'POST':
        user = request.form['name']    #request.form['name']:获取表单数据
        return redirect(url_for('user',name = user))    #redirect:重定向到/user/<name>

    else:
        user = request.args.get('name','')
        return redirect(url_for('user',name = user))

if __name__ == '__main__':
    app.run(debug=True,host="172.16.17.29",port = 6000)

运行

POST

GET

结果

相关推荐

  1. tornado模板注入

    2024-06-08 05:38:04       176 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 05:38:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 05:38:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 05:38:04       82 阅读
  4. Python语言-面向对象

    2024-06-08 05:38:04       91 阅读

热门阅读

  1. Python | R 潜在混合模型

    2024-06-08 05:38:04       29 阅读
  2. HTML label 标签的作用和应用场景

    2024-06-08 05:38:04       24 阅读
  3. docker 启动

    2024-06-08 05:38:04       32 阅读
  4. STM32F103借助ESP8266连接网络

    2024-06-08 05:38:04       28 阅读
  5. shardingsphere5 自定义分片(sharding-algorithm)算法

    2024-06-08 05:38:04       31 阅读
  6. Git概念用法

    2024-06-08 05:38:04       27 阅读
  7. Sed流编辑器总结

    2024-06-08 05:38:04       29 阅读