Flask03——cookie和session

Flask Session伪造实战:手把手教你用flask-unsign破解PicoCTF Most Cookie靶场 本文详细介绍了如何利用flask-unsign工具破解PicoCTF Most Cookie靶场,从密钥爆破到Session伪造的全过程。通过实战操作,读者可以掌握Flask Session的安全漏洞及防御措施,特别适合CTF竞赛和Web安全测试的爱好者。 阅读详情

cookie技术的必要性

今天来讲一个在现今web应用中,最最基础和最最重要的技术点,几乎没有他们就无法促成web技术的推广和应用,他们就是cookie和session一对孪生兄弟。先说一下他们诞生和存在的必要性。
我们在浏览网站的时候,访问每一个页面都需要使用“http协议”来实现。而http协议是无状态的协议,就是说http协议没有一个内部的机制来维护两次请求之间的状态保持。比如说当一个用户请求同一个网站的A页面后,再请求B页面,http协议不能告诉服务器这两次请求是来自于同一个用户。而是会把两次请求当做独立的请求。而要让网站能记住多次请求来自同一个用户的这种需求在网站开发中是非常必需的技术。下面举一个我们经常用到的网站的功能你就能明白为什么需要这种技术了。
比如我们在网上购物的时候,往往会添加多个商品到自己的购物车当中,每添加一件商品就是一次请求,那么为了使得我们多次添加购物车的动作都能放到同一个用户的名下,是不是需要保证多个请求的请求来自于同一个用户?所以对这一技术的强烈需求就诞生了cookie技术。

cookie的实现原理

cookie可以将用户信息比如用户id保存到浏览器当中的cookie里面,cookie是一个类似缓存的东西,当用户通过验证之后服务器就会将用户的id保存到cookie里面,当用户请求不同页面的时候都会携带着用户的id,如果进行添加购物车的动作的话,那么多个商品都会放到此用户id下面,当用户需要下单的时候程序就会通过此id对应找到数据库里面的此用户的记录,生成一条此用户id的订单记录。这样就能实现不同页面跳转的时候唯一确定用户身份了。

打个比较容易理解的比喻:如果把服务器比作一家商场,商场中的每个店面比做一个页面,而cookie好比你第一次去商场时,经过你提供用户信息之后,由商场为你提供的一张会员卡。当你在这家商场的任何店面中购物时,只要你提供由你保存的会员卡,就会被看做商场的会员。你在此商城所有店面所购买的所有商品都会放到你的会员名下。
cookie原理示意图:
在这里插入图片描述

flask是如何实现和应用cookie技术的

首先肯定是保存cookie,保存cookie这个动作一般是用在登录的时候,那么下面就让我们写一个模拟登录的视图函数login,由于现在还不涉及和数据库的验证交互,所以就不进行验证,就算验证通过了,然后直接写入cookie

# 顶部引入make_response
from flask import Flask, make_response


@app.route('/login')
def login():
    response = make_response('登录成功!')  # 实例化响应对象
    response.set_cookie('username', 'xiaoming')  # 通过相应对象的set_cookie方法设置cookie,
    # cookie信息是一个键值对形式的数据,以cookie形式进行保存
    return response

这里需要用到相应对象make_response,实例化之后,可以用它的一个方法set_cookie进行cookie信息的保存。保存之后返回响应结果。如果我们请求这个视图函数之后,键值对形式的username=xiaoming就被保存到了cookie当中了。我们可以通过检查元素的存储,再点击cookie查看保存的cookie信息。如果正常保存就可以看到保存的cookie信息。这样保存用户信息之后,当我们再次通过浏览器发起对服务器的请求的时候,浏览器就会自动带上此网站的cookie,由于cookie中保存的是用户信息,所以我们就可以以此来唯一确定用户身份了。就可以保持状态了。
登录之后,我们下一步就要验证看看我们是否可以从cookie当中拿到保存在cookie中的用户信息呢?如果能拿到,那么我们就可以进行展示出来,也就是我们经常在网站右上角看到的,登录之后显示的用户名等个人信息。那么下面我们再来创建一个登录信息的视图函数。

@app.route('/user_info')
def user_info():
    return request.cookies.get('username', '用户信息不存在!')

以上代码就是通过上一节我们用到的request对象下面的cookies来拿到cookie当中保存的用户信息,如果找不到用户信息,则提示用户信息不存在。
现在已经模拟了登录和访问用户中心了,接下来就该退出了。退出的语法应该这样来写。

@app.route('/logout')
def logout():
    response = make_response('退出成功!')
    response.delete_cookie('username')
    return response

这次依然用到了make_response对象的删除cookie的方法来清除cookie记录。cookie一旦被清除,那么在用户中心就获取不到用户信息了,就会输出用户信息不存在!

session的实现原理

sesion和cookie相似,都是用来存储用户信息的,最大的不同在于,cookie是将用户信息保存在客户端的计算机中,而session则是将用户的信息加密以后放到服务器的session当中,由于服务器上会保存很多用户的信息,所以要对各自的session信息进行编号,就类似在服务器放了很多盒子,每个盒子里面存放着一个用户的加密信息,那么每个盒子的编号我们这里用session_id来表示,服务器就会把这个session_id返回到客户端,客户端把这个session_id保存到cookie当中,下次再请求服务器的时候,会自动带上这个session_id由于每个人的session_id都是随机生成,而且是唯一的,所以就能唯一确定用户身份。还有就是,用户信息这次是加密之后保存在服务器端的,所以要比cookie更加安全。
对比我们在cookie中举得例子,可以这样来形容:如果用户去商场的时候忘记带会员卡了,但是他之需要提供卡号(session_id)就还是可以唯一确定用户身份的,因为会员卡号肯定是唯一的。
session实现原理示意图:
在这里插入图片描述

flask的session原理

上面讲的时常规的session原理,而flask框架在上面的基础之上,又做了一次封装,使得我们读取和使用session更加简单。flask是直接将加密之后的用户数据返回给了客户端,客户端再通过cookie进行保存,所以依然是让客户端保存用户信息,而不是返回盒子编码(session_id),这样,服务器就不用保持用户信息了,节省了服务器的开销。那么取session当中的用户信息也是可以直接取,就不用再经过session_id这个中间环节了。由于我们一直在强调是要把用户信息加密之后进行保存的,所以就需要设置一个SECRET_KEY,这个就相当于对我们的加密算法加盐,也就是加了我们自定义的干扰项,更进一步的保证数据的安全性。
由于flask这种封装,所以我们在操作session的时候就相当于操作session这个字典一样,所以关于登录、用户中心,退出这些功能的实现一并展示到下面统一为大家做解释。

@app.route('/login2')
def login2():
    session['username'] = 'xiaohua'
    return '登录成功!'


@app.route('/user_info2')
def user_info2():
    return session.get('username', '用户信息不存在!')


@app.route('/logout2')
def logout2():
    session.pop('username', None) # None参数保证不报错,也就是当pop找不到需要删除的下标的时候会返回None,从而使得不报错。
    return '退出成功!'

flask实现session原理示意图:
在这里插入图片描述
对于登录就是往session字典当中加元素就可以了,加了之后就可以通过下标访问到用户的信息在用户中心进行展示输出,那么退出登录的时候可以通过键找到相应的键值对,一并弹出删除,如果不存在返回None,避免报错。

Flask Session密钥爆破实战:从PicoCTF Most Cookie看Web安全测试 本文深入解析Flask Session密钥爆破实战,以PicoCTF Most Cookie为例,揭示Web安全测试中的关键漏洞。通过详细讲解Flask的session机制、密钥爆破工具flask-unsign的使用方法,以及防御措施,帮助开发者提升Web应用安全性。 阅读详情

相关推荐

Flask 源码解析:session

在解析 session 的实现之前,我们先介绍一下 session 怎么使用。session 可以看做是在不同的请求之间保存数据的方法,因为 HTTP 是无状态的协议,但是在业务应用上我们希望知道不同请求是否是同一个人发起的。比如购物网站在用户点击进入购物车的时候,服务器需要知道是哪个用户执行了这个操作。在 flask 中使用 session 也很简单,只要使用导入这个变量,在代码中就能直接通过读写它和 session 交互。上面这段代码模拟了一个非常简单的登陆逻辑,用户访问来登陆,后面访问页面的时候。

AudiA6LV6的博客 339

探索创新数据生成工具:Faker3

探索创新数据生成工具:Faker3 项目简介 是一个基于Python的开源库,用于生成各种模拟数据,如姓名、地址、电话号码、电子邮件等,非常适合开发者在进行数据测试、数据库填充或者隐私保护场景时使用。这个项目是对经典Faker库的一个创新升级,提供了更丰富和多样化的数据集,以满足不同项目的需求。 技术分析 Faker3的核心是其内部的数据提供者(providers),这些提供商覆盖了多种类型的数据...

gitblog_00027的博客 520

Flask03:配置管理

在Flask中我们推荐通过下面的方式对我们的应用程序进行配置。 使用配置文件来配置应用程序不敏感数据 使用环境变量来配置用户敏感数据,比如数据库相关信息,以及一些秘钥等等 Flask内置配置变量 名称 描述 初始值 ENV 应用运行于什么环境。 Flask 和 扩展可以根据环境不同而行为不同,如打开或 关闭调试模式。 env 属性映射了这个配置键。本变量由 FLASK_ENV 环境变量设置。如果本变量是在代码中设置的话,可能出 现意外。 production DEBUG 是否开启调

秋殇阁 373

Flask session详细用法

Flask session概念解释 session是基于cookie实现的,保存在服务端的键值对,形式为{随机字符串:‘xxxxxx’},同时在浏览器中的cookie中也会保存相同的随机字符串,用来再次请求时验证 注意:Flask中的session是保存在浏览器中的,默认的key是session(加密的cookie),当然也可以将其保存在数据库中 flask中有一个session对象,它允许你...

zhangyukun555的博客 1万+

(十二)Flask重点之session

(十二)Flask重点之session

孤寒者的博客 1万+

用Python的fengwo模块复刻通达信筹码峰(COST/WINNER),选股效率提升10倍

本文介绍了如何使用Python的fengwo模块高效复刻通达信的筹码峰(COST/WINNER)计算,显著提升选股效率。通过C++内核与多线程优化,fengwo模块将传统Python实现的数小时计算压缩至分钟级,解决了量化交易中的性能瓶颈问题。文章详细解析了筹码峰计算原理、fengwo模块的技术架构及实战应用,助力量化开发者构建高效选股系统。

weixin_29062823的博客 440

Flask中的session

点击“添加session”按钮,服务端会创建一个:“session["test"] = this is test”的session。点击“获取session”按钮,服务端会返回session的值,前端用console.log()打印出这个值。在这里,我们创建了一个简单的前端页面,并且添加了三个按钮,方便为下面的功能做说明。在这里我们推荐使用第二种和第三种,并且定期更新密钥,防止数据泄露。点击“删除session”按钮,服务端会删除所有session。”用来再此请求的时候验证。中的字典一样,我们可以使用。

zheshiyangyang的博客 2606

论文分享 - OctoMap八叉树建图原理

论文:OctoMap:An Efficient Probabilistic 3D Mapping Framework Based on Octrees。

一只废佐_的博客 2541

Flask中Cookie与Session用法详解

Flask中Cookie与Session用法详解

IT之一小佬的博客 2118

C#串口通信从入门到精通(11)——串口接收的数据存储到本地文件(txt、csv)

本文详细介绍如何将串口通信将数据进行本次存储,主要介绍常用的csv、txt格式文件,由多年实战经验总结,绝对干货!

qq_34059233的博客 7240

从LLM到VLM再到VLA:三兄弟的“变形记”——定义、架构演进与最新趋同

LLM、VLM、VLA虽然在时间上依次出现,但它们在架构上的演进并非线性替代,而是形成了一个从“理解语言”到“理解世界”再到“改变世界”的认知闭环。VLA之所以能在短短三年内从概念走向现实,正是因为它站在了LLM和VLM的肩膀上——RT-2的泛化能力来自互联网规模的VLM预训练,π0的扩散策略受益于生成式模型的突破,Helix的双系统架构借鉴了“快慢思考”的认知科学洞见。而反过来,VLA在实际部署中遇到的效率瓶颈和实时性要求,也在倒逼LLM和VLM向更轻量、更高效的架构方向演进。

Ven%的博客 495

Flask高级应用03---cookie和session

前言 Session和Cookie的结合使用,一般有两种存储方式: 第一种: session数据存储在客户端: Flask采用’secure cookie’方式保存session,即session数据是使用base64编码后保存在客户端的cookie中。也就是说无须依赖第三方数据库保存session数据。 第二种: session数据存储在服务端,分为以下三步骤: 步骤1: 当客户端发送请求到服务...

清平乐的技术专栏 799

秃鹰搜索优化算法(BES)详解:从自然捕食到全局优化

秃鹰搜索优化算法(Bald Eagle Search Optimization Algorithm,BES)是由马来西亚学者Alsattar等人于2020年提出的一种新型元启发式优化算法。该算法灵感来源于秃鹰在自然界中高超的捕食行为,特别是其独特的狩猎策略和卓越的视觉搜索能力,模拟了秃鹰捕食鲑鱼等猎物的完整过程。

qq_42212808的博客 1353

flask笔记3:响应信息与Session Cookie

响应信息01 Abort函数02 自定义异常处理03 设置响应信息04 返回json数据Cookie与session01 Cookie03 session

越开源越幸运 308

【SpringBoot 3.x 第56节】再见 Feign?原生 HTTP 接口强势上位,这才是微服务调用的正确姿势!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1017

RK AVS双目融合记录

NOTE] 调试平台双目avs融合调试,需要先保证两个摄像头能正常出图同时出流。使用默认工具测试vi->avs->venc通路是否正常,-a可指定isp效果文件需要开启CONFIG_VIDEO_ROCKCHIP_AVSP和CONFIG_VIDEO_ROCKCHIP_FEC,dts中使能。

mangofu的博客 106

Flask 学习笔记(七)-会话技术Cookie,Session

cookie 客户端会话技术 数据都是存储在浏览器中 支持过期 不能跨域名 frame 标签 可以直接加载整个网站 不能跨浏览器 cookie是通过Response来进行操作 flask中的cookie可以直接支持中文 flask对cookie中的内容做了编码 设置cookie时使用 Response对象 resp.set_cookie('key', value) 获取cook...

Sajor的博客 392

[Dify实战]插件编写- 如何让插件直接输出文件对象(支持 TXT、Excel 等)

本文介绍了在Dify插件中实现文件对象返回的方法。通过create_blob_message()函数,开发者可以输出txt、Excel等格式文件,让用户直接下载而非复制文本。文章详细讲解了二进制文件生成的原理,提供了文本翻译和Excel报表生成的代码示例,并列出常见MIME类型对照表。这种技术能显著提升插件实用性,特别适用于翻译、报表生成等需要文件输出的场景,使交互体验从"复制粘贴"升级为"一键下载"。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1249

session过期时间_Flask干货:Flask数据交换——Session的使用

图 | 源网络文 | 5号程序员上一次我们学习了Cookie,知道Cookie是保存在客户端的。那么有的小伙伴就问了,难道只有客户端能保存?服务器就不可以保存吗?!当然可以!Session就是另一种记录用户状态的机制。Flask的Session是基于Cookie实现的,经过加密保存在服务端的键值对(sesson[‘name’]=’value’)中。当然,在服务器的Cookie中也对应一个...

weixin_39963174的博客 306

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Flask教程--第一个Flask应用:会话session

一、Flask启用session Flask中使用session之前需要设置一个密钥app.secret_key。生成secret_key可以使用下面的方法: $ python -c 'import os; print(os.urandom(16))' b'_5#y2L"F4Q8z\n\xec]/' 然后使用from flask import session导入session即可使用。...

Sweeneys的博客 1765

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Flask中cookies和session的使用

1、cookies / cookie 1、什么是cookies cookies是一种数据存储手段 将一段文本保存在客户端(浏览器)的一种手段,并可以长时 间保存 2、cookies的使用场合 1、记住密码 2、记住搜索关键词 3、在Flask中使用cookies 1、使用相应对象,将数据存进cookies(客户端) resp = make_response("字符串" | render_template) resp = redirect('地址') Cookies的语法 相应对象.s

黑色小米粥 386

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Flask框架

Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架。 Flask 本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy),都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、窗体验证工具,文件上传、身份验证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQ

有用的话关个注,点个赞,收个藏🫶。 2084

Flask_03

Flask_03 一、蓝图 1、简介 一个Web项目,会有很多个模块,如用户管理、部门管理、账号管理等模块 ,如果把所有的这些模块都放在一个app.py文件之中,那么最后app.py文件必然臃肿不堪,并且极难维护 。因此flask中便有了blueprint的概念。 在Django中使用app来对项目进行模块化管理,解耦合,利于项目管理和维护。 2、如何搭建项目结构 ❶ 在project的根目录...

qq_37839978的博客 196

Flask-03

SQLAlchemy 通过SQLAlchemy连接数据库 python在MySQL新建表 python在MySQL增删改查 插入表 插入多行 从表中选取(SELECT)数据 从MySQL表中选取(SELECT)数据 选取表中的部分字段, 只取一行 WHERE筛选数据 通配符 防止SQL注入 对结果排序 删除记录 删除表 更新表 限制结果数量 cookie和session flask中使用cookie和session wtforms表单验证 一、表单验证

m0_62497122的博客 616

flask 源码解析:session

7.flask 源码解析:session 文章目录7.flask 源码解析:sessionsession 简介解析请求过程session 对象签名算法应答过程解密 session总结 session 简介 在解析 session 的实现之前,我们先介绍一下 session 怎么使用。session 可以看做是在不同的请求之间保存数据的方法,因为 HTTP 是无状态的协议,但是在业务应用上我们希望知道不同请求是否是同一个人发起的。比如购物网站在用户点击进入购物车的时候,服务器需要知道是哪个用户执行了这个操作。

淘小欣的博客 622

03 Flask-添加配置信息

Debug是调试模式,在Flask中,开启Debug模式意味着应用运行在调试模式下,这允许应用在出错时提供更详细的错误信息,并且在代码修改后自动重载。

宇宙第一小趴菜的博客 1176
上一篇: Flask02——request请求及传递接收参数
下一篇: Flask04——请求上下文和应用上下文
零寂前端
博客等级 码龄11年 59粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值