16、XSS——会话管理

news2024/11/22 13:54:07

文章目录

  • 一、web会话管理概述
    • 1.1 会话管理
    • 1.2 为什么需要会话管理?
    • 1.3 常见的web应用会话管理的方式
  • 二、会话管理方式
    • 2.1 基于server端的session的管理方式
    • 2.2 cookie-based的管理方式
    • 2.3 token-based的管理方式
  • 三、安全问题

一、web会话管理概述

1.1 会话管理

  在人机交互时,会话管理是保持用户的整个会话活动的互动与计算机系统跟踪过程。会话管理分类:桌面会话管理、浏览器会话管理、web服务器的会话管理。

1.2 为什么需要会话管理?

  HTTP是一种无状态协议,一次请求结束,客户端与服务器的连接就会断开,服务器再次收到请求时,无法识别此次请求是哪个用户发过来的,需要重新建立连接。为了判断发送请求的用户,需要一种记录用户的方式,也就是web应用会话管理。

1.3 常见的web应用会话管理的方式

  • 基于server端的session的管理方式
  • cookie-based的管理方式
  • token-based的管理方式

二、会话管理方式

2.1 基于server端的session的管理方式

  在早期的web应用中,通常使用服务端session来管理用户的会话。
  服务端session使用户第一次访问应用时,服务器就会创建的对象,代表用户的一次会话过程,可以用来存放数据。服务器为每一个session都分配一个唯一的session ID,以保证每个用户都有一个不用的session对象。
  服务器在创建完session后,会把session ID通过cookie返回给用户所在的浏览器,这样当用户第二次及以后向服务器发送请求的时候,就会通过cookie把session ID传回给服务器,以便服务器能够根据session ID找到该用户对应的session对象。
  session 通常设定有效时间,比如1小时。当时间失效后,服务器会销毁之前的session,并创建新的session返回用户。但是只要用户在失效时间内,有发送新的请求给服务器,通常服务器都会把他对应的session的有效时间根据当前的请求时间再重新刷新。
  session在一开始并不具备会话管理的作用。它只有在用户登录认证成功之后,并且往session对象里面放入了用户登录成功的凭证,才能用来管理会话。管理会话的逻辑也很简单,只要拿到用户的session对象,看它里面有没有登录成功的凭证,就能判断这个用户是否已经登陆。当用户主动退出时,会把它的session对象里的登录凭证清掉。所以在用户登录前或退出后或者session对象失效时,肯定都是拿不到需要的登录凭证的。
  session实现会话管理的流程图:
在这里插入图片描述

2.2 cookie-based的管理方式

  session的管理方式会增加服务器的负担和架构的复杂性,所以后来就提出把用户的登录凭证直接存在客户端的方案,当用户登陆成功后,把登录凭证写到cookie里面,并给cookie设置有效期,后续请求直接验证存有登录凭证的cookie是否存在以及凭证是否有效,即可判断用户的登录状态。
> Cookie与Session最大的区别:
>- Cookie将数据存储在客户端
>- Session将数据存储在服务端

  用户发起登录请求,服务端根据传入的用户密码之类的身份信息,验证用户是否满足登录条件,如果满足,就根据用户信息创建一个登录凭证,这个登陆凭证简单来说就是一个对象,最简单的形式可以只包含用户id、凭证创建时间和过期时间三个值。
  服务端把上一步创建好的登陆凭证,先对它进行数字签名,然后再用对称加密算法做加密处理,将签名、加密后的字串,写入cookie。cookie的名字必须固定(如ticket),因为后面再获取的时候,还得根据这个名字来获取cookie值。这一步添加数字签名的目的时防止登录凭证里的信息被篡改,因为一旦信息被篡改,那么下一步做签名验证的时候肯定会失败。做加密的目的是,防止cookie一旦被别人截取的时候,无法轻易读取到其中的用户信息。
  用户登录后发起后续请求,服务端会根据上一步存登录凭证的cookie名字,获取到相关的cookie值。然后先做解密处理,再做数字签名的认证,如果这两部都失败,说明这个登录凭证非法;如果这两步成功,接着就可以拿到原始存入的登录凭证了。然后用这个凭证的过期时间和当前时间做对比,判断凭证是否过期,如果过期,就需要用户再重新登录;如果未过期,则允许请求继续。
  cookie实现会话管理的流程:
在这里插入图片描述
优点:
1. 实现了服务端的无状态化,服务端只需要负责创建和验证登录cookie即可,无需保持用户的登陆状态。
2. cookie可以跨越同域名下的多个网页,但不能跨越多个域名使用。
3. 可以设置有效期限,控制cookie的生命周期,使之不会永久有效。

缺点:

  1. cookie有大小限制,存储不了太多数据。
  2. 同样存在跨域问题(不同域名无法相互读取cookie)。

2.3 token-based的管理方式

  Session和Cookie两种会话管理方式由于都要用到cookie,不适合用在native app里面,因为native app不是浏览器,不好管理cookie,因此都不适合做纯API服务的登录认证。是实现API服务的登录认证,就需要用到token-based的会话管理方式。
  token-based的管理方式在流程上和实现上跟cookie-based的管理方式没有太多区别,只不过cookie-based的管理方式中写道cookie里面的ticket再这种方式下被称为token,这个token在返回给客户端后,后续请求都必须通过url参数或者http header的形式,主动带上token,这样服务端接收到请求后就能直接从http header或者url里面渠道token进行验证。
  token实现会话管理的方式:
在这里插入图片描述
优点:

  1. 支持跨域访问:cookie不支持跨域访问,token支持。
  2. 无状态:Token无状态,session有状态(有状态和无状态的最大区别就是服务端会不会保存客户端的信息)。
  3. 支持移动设备:Token更适合移动应用,cookie不支持手机端访问。

缺点:
4. 占带宽:正常情况下Token要比session id更大,需要消耗更多的流量,挤占更多的带宽。’
5. 无法在服务端注销,很难解决劫持问题。

三、安全问题

  在web应用里,会话管理的安全性始终是最重要的安全问题,对用户的影响极大。
  从会话管理凭证来说,session会话管理的会话凭证仅仅是一个session ID,所以只要这个session ID足够随机,那么攻击者就不会轻易地冒充别人的session ID进行操作;cookie会话管理的凭证(ticket)以及Token会话管理凭证(token)都是一个在服务端做了数字签名和加密处理的串,只要密钥不泄露,攻击者也无法轻易拿到这个串中有效信息并对它进行篡改。总之,这三种会话管理方式的凭证本身是比较安全的。
  从客户端和服务端的HTTP过程来说,当攻击者截获到客户端请求中的会话凭证,就能拿到这个凭证冒充原用户,做一些非法操作,而服务器也认不出来。这种安全问题,可以简单采用HTTPS来解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1288498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python】包(package)与模块(module)、import、__name__与__main__

导入模块一般写在程序最前面,且顺序为:内置模块、第三方模块、自定义模块 一、模块(module)与包(package) 模块(module)可以理解为是一个.py文件,import 模块 相当于执行…

java--接口的其他细节

1.jdk8开始,接口新增了三种形式的方法 ①默认方法(实例方法):使用用default修饰,默认会被加上public修饰。注意:只能使用接口的实现类对象调用 ②私有方法:必须用private修饰(jdk9开始才支持) ③类方法(静态方法)&a…

EG网关串口连接施耐德M340PLC应用案例

EG网关串口连接施耐德M340PLC应用案例 前言:施耐德M340 PLC广泛应于工业控制领域,是一款性能高,运行稳定的控制器。此次我们要把施耐德M340 PLC通过Modbus-RTU协议使用EG网关连接到EMCP物联网云平台(简称EMCP)&#x…

制作古风纹理的滕王阁3D模型

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 滕王阁,位于江西省南昌市东湖区沿江路,地处赣…

香港优才计划申请获批后,才发现原来香港年薪100w并不难!

香港优才计划申请获批后,才发现原来香港年薪100w并不难! 在香港工作的话,给我个人的感觉就是工作和生活是分开的,无论是同事还是上司。比如员工在休假的时候从来不会突然来个电话让你忙个工作或者加个班,也不会八卦你的…

Linux下搭建私有的MQTT服务器实现多设备间实时图传

一、前言 在Linux(ubuntu 18.04)系统下使用EMQX搭建自己私有的MQTT服务器,实现多设备间实时图传效果。 测试了两种场景: 【1】图像采集端:采集电脑自己的摄像,通过MQTT协议上传到MQTT服务器,图像显示端订阅采集端的主题,获取实时图像显示。 【2】设备端:ESP32 + OV26…

java每日一记 —— 常见的Bean后置处理器

此代码在jdk11上测试通过,SpringBoot版本为2.7.14 1.上代码 1.测试方法 public class Dome04Application {public static void main(String[] args) {// 这是一个干净的容器GenericApplicationContext context new GenericApplicationContext();// 添加3哥Beanc…

LeetCode-470. 用 Rand7() 实现 Rand10()【数学 拒绝采样 概率与统计 随机化】

LeetCode-470. 用 Rand7 实现 Rand10【数学 拒绝采样 概率与统计 随机化】 题目描述:解题思路一:首先说一个结论就是(rand_X() - 1) Y rand_Y() > [1,X*Y],即可以等概率的生成[1, X * Y]范围的随机数,其实就像军训的时候报数…

DG领域常见算法:Domain Alignment

本文主要参考:Domain Generalization: A Survey Problem Definition 在DG的setting中,我们通常能拿到 K ( K ≥ 1 ) K(K\ge 1) K(K≥1)个source domain的数据,这几个source domain相似但并不相同,记为 S { S k { ( x ( k ) , …

Vue 实现基于 LogicFlow 自定义节点美化工作流

话不多说,先看效果: 动态效果: 完整设计界面: 右键菜单: 未完待续…

Java零基础——秒杀篇

1.【秒杀】 1.1. 技术选择型 Springboot Redis Rocketmq Mysql MybatisPlus 1.2. 架构图 1.3. 准备工作-数据库 SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS 0;-- ------------------------------ Table structure for goods-- ----------------------------DROP…

【labview报错,缺少GOOP Development Suite】

操作 当labview报此错误时,第一类情况为缺少包,第二类为所使用的GPU包已失效 以下为第一类缺包的解决方式 登录VIPM,如何安装VIPM查看此贴:VIPM安装 打开VIPM后,右上角输入goop,双击搜索出的安装包 勾选需要安装的包…

Java_ArrayList顺序表详解

目录 前言 顺序表 ​编辑 顺序表和数组 ArrayList简介 说明 ArrayList使用​编辑 ArrayList常见操作 ArrayList实现二维数组 ArrayList的遍历 ArrayList的扩容机制 总结 前言 一个高端的程序员,往往都是数据结构学的很好,判断一个程序的优劣也是看数据结构学的好与坏.…

Mysql-全外连接-Union和Union ALL的辨析及练习

mysql不支持FULL JOIN,但是可以用 (select 语句1) union (select 语句2)代替 🐶1. SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 请注意,UNION 内部的 SELECT 语句…

使用git出现的问题

保证 首先保证自己的git已经下载 其次保证自己的gitee账号已经安装并且已经生成ssh公钥 保证自己要push的代码在要上传的文件夹内并且配置文件等都在父文件夹(也就是文件没有套着文件) 问题 1 $ git push origin master gitgitee.com: Permission de…

Vue混淆与还原

Vue混淆与还原 引言 Vue是一种流行的JavaScript框架,用于构建用户界面。它简单易用且功能强大,备受开发者喜爱。然而,在传输和存储过程中,我们需要保护Vue代码的安全性。混淆是一种有效的保护措施,可以加密和压缩代码…

简单构造好题

没啥思路,看到题解,先处理最大值,发现非常的nice // Problem: C. Polycarp Recovers the Permutation // Contest: Codeforces - Codeforces Round 756 (Div. 3) // URL: https://codeforces.com/problemset/problem/1611/C // Memory Limit:…

window下安装RocketMQ

本文以window11、JDK1.8、RocketMQ4.9.7版本为例 1.下载安装 1.1.官网 官网官网文档官网下载 1.2.下载 1.3.解压 2.配置 2.1.环境变量添加ROCKETMQ_HOME 2.2.环境变量添加JAVA_HOME 安装jdk1.8,并配置环境变量JAVA_HOME 3.启动 如果JAVA_HOME未指向jdk1.…

win10下maven安装与配置

1.下载安装 去官网下载最新版的安装包,然后解压到安装目录。 2.配置 右键桌面的计算机图标,属性–>高级系统设置–>环境变量,添加M2_HOME的环境变量,然后将该变量加入的PATH中。 如果想要修改maven的本地仓库位置&…

spring data Redis整合spring cache实战(附源码及源码分析)

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 背景 最近在研究缓存框架,打算写一个多级缓存框架的sdk。所以想借鉴(抄袭)下spring的缓存框架的实现 spring cache reids spring cache对各种缓存进…