SSTI漏洞基础解析

flask基础

flask是python编写的一个WEB应用程序框架,flask由Armin Ronacher带领的一个Pocco团队开发,flask基于werkzeug
WSGI工具包个jinjia2模板引擎。

WSGI:Web Server Gateway Interface,即WEB服务器网关接口。

第一个flask程序

# 从flask中导入Flask,注意,flask是包名,Flask是模块名
from flask import Flask
# 初始化Flask
app = Flask(__name__)
# route是路由的意思,这里理解成路径,设置/则默认打开index页面,注意用单引号或者双引号包含起来
@app.route('/')
# 定义index函数,index函数名可以换成其他的,不一定强制要index,这里也就是相当于写一个页面
def index():
    # return的内容,会被显示在页面中
    return 'Hello,world!!!'

if __name__ == '__main__':
# 开始使用本地地址和指定的8080端口运行起来,如果不指定端口,则默认使用5000端口
# 如果不指定IP地址,默认只能本机访问,如果需要其他地方也能访问到本机开启的flask,则需要将地址换成0.0.0.0
    app.run('127.0.0.1','8080')

以上简单介绍了第一个flask创建的web服务器。

wKg0C2JGx3SAXKAvAACjLyx7nNw003.png

图片中启动flask后,可以在控制台查看到信息。

debug

flask编写的程序和php不一样,每一次变动都需要重启服务器来执行变更,就显得很麻烦,为了应对这种问题,flask中的debug模式可以在不影响服务器运行下,执行更新每一次的变更

debug=True

只需要在app.run原基础上加上debug.True,或者直接app.debug=True

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello,world'

if __name__ == '__main__':
    app.debug = True
    app.run('127.0.0.1','8080')
    # app.run('127.0.0.1','8080',debug=Ture)

route

程序中见到的@app.route(‘/’),相当于一个路径,可以是app.route(‘/user’),或者其他自定义的route,设置后,在url后面加上/user就可以访问了,每一个route后面都必须会有一个def函数跟着,代码解析一下。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello,vfree'

@app.route('/user')
def user():
    return 'username:vFREE'

if __name__ == '__main__':
    app.debug = True
    app.run('127.0.0.1','8080')

wKg0C2JGx32AGSvrAAEM4YeBapU730.png

我新建了一个route,然后写成/user,创建好后,访问127.0.0.1:8080/user,就会return回username:vFREE。实际上,flask的route在php中相当于文件名,而def中的内容,相当于文件内容。

识别传入的参数

给url添加可以传入变量的地方,只需要在route中的路径后面添加标记<value_name>,然后使用def接收,代码解释下。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello,vfree'

@app.route('/user/<username>')
def user(username):
    return 'username:{0}'.format(username)

if __name__ == '__main__':
    app.debug = True
    app.run('127.0.0.1','8080')

看到第二个route出,其中加了/<username>,这就是传入参数的接口,其中username相当于一个变量,将username放进def
user()中,然后用format带入username。

wKg0C2JGx4SAYKiAAEM4YeBapU386.png

输入/user/vfree就会输出Hello,vfree,往下看,接着将讲如何判断GET和POST,以及输出传入的数据参数。

HTTP方法

这里主要讲GET和POST方法。

GET方法和POST方法

from urllib import request
from flask import Flask,request
app = Flask(__name__)

@app.route('/method',methods = ['GET','POST'])
def method():
    if request.method == 'GET':
        return '现在的方法是GET'
    elif request.method == 'POST':
        return '现在的方法是POST'

if __name__ == '__main__':
    app.debug = True
    app.run('127.0.0.1','8080')

仔细分析上面的代码,会发现多了一个request和methods,request主要是用于在判断时,获取当前页面的方法,如果直接打开URL,就会显示GET方法,如果使用POST,就会显示POST方法,如下图测试页面:

wKg0C2JGx5eAc7TTAAA9KbJ3r24633.png

wKg0C2JGx46AXzgfAACdLmhN9E968.png

route中,methods要有s,并且方法用[ ]
括起来ÿ

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值