Https身份鉴权(小迪网络安全笔记~

news2024/12/18 4:20:36

附:完整笔记目录~
ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正!

5.2 Https&身份鉴权

  1. 引子:上一篇主要对Http数据包结构、内容做了介绍,本篇则聊聊Https、身份鉴权等技术。

  2. Https

    1. 概述
      由于Http报文在通信链路中明文传输,因此一旦报文被截获,任何人都可查看更改Http报文内容。而这一行为往往会造成许多安全隐患,如窃取受害者的登录凭证、使受害者访问恶意网页等。
      这也是我们所常说的中间人攻击,而Https则为解决该问题而出现,通过TLS加密协议,确保数据在传输时不会被第三方窃取且能对用户访问服务器身份进行验证。
    2. Https数据包
      接下来展示通过WireShark嗅探到的Http/Https数据包。
      image-20241208132924465
    3. Q&A
      Q1:既然Https数据包被加密,那为什么在浏览器&各抓包软件中都可以获取到Https数据包的实际内容呢?
      A1:这其实是基于TLS加密原理。简单来说通过TLS加密的报文内容,无论是客户端还是服务端在获取到报文时均需先使用证书进行解密才能得到原报文内容。我们的浏览器实际上已经提前将所需证书安装好了,而各抓包软件也同样内置了证书。
      Q2:那既然抓包软件内置了证书,已经可以拦截、解密Https数据包了,为什么我们本地也需要额外安装抓包软件的证书?
      A2:是因为Https数据包由抓包软件转发给用户本地,而证书不仅有解密TLS的功能,也能验证用户访问的服务器是否合法。若本地不安装抓包软件证书,则当Https报文由抓包软件转发给本地浏览器时,由于证书校验不上,浏览器会弹出安全告警且阻止解密。(当然,你要使用抓包软件自带浏览器则无该问题,因为其浏览器已经装好了对应证书。)
  3. 身份鉴权
    引子:Https解决了Http报文在客户端和服务端之间安全传输的问题,而客户端自身仍会产生安全问题,如越权访问、敏感用户账号密码被爆破、身份被伪造等。因此产生了身份鉴权技术,其目的就是为了确认用户/系统在访问某一资源时,身份是否合法。下面则对常见的身份鉴权方式做一介绍。

  4. Http基本鉴权

    1. 概述:组合用户所输入的账户&密码,并进行base64编码。

    2. 鉴权流程

      1. 请求一个受限内容。
      2. 客户端输入账户&密码,账户密码于前端被组合且进行base64编码。
      3. 服务端收到后,解码并验证账户密码是否正确。
    3. 影响

      1. 对于用户:每一次访问新的受限内容时,无论是否跨域,都需重新输入账户&密码,很麻烦。
      2. 对于安全测试者:账户&密码就相当于明文传输,常规测试手法仍有效,如爆破、注入等。
        现如今也几乎不存在这种鉴权方式,放到这了解一下就行。
  5. Session - Cookie

    1. 概述:Session - Cookie为解决用户每次访问新受限页面时需重新登录问题。

    2. 鉴权流程

      1. 请求一个受限内容,客户端输入账户&密码。
      2. 服务端收到后,基于用户输入生成Session并保存。
      3. 此时在服务端响应包中,响应头会存在一个Set-Cookie字段,其内容则为刚刚生成Session的唯一标识Session ID。
      4. 客户端收到后,会将Set-Cookie的值(Session ID)存储于本地浏览器Cookie中。
      5. 当客户端对同站不同页面内容进行访问时,其请求包请求头会携带Cookie。
      6. 服务端收到后,只需比对保存的Session和来自客户端Cookie中的Session ID,就能通过ID判断会话是否存在。若会话存在则证明客户端身份正确,无需客户端反复输入账户密码。
        补:我们常常会发现,发送给服务端的Cookie内容往往有很多,因为Cookie除了含有登录凭证外,还有一些个性化设置或其它要记录的数据等内容。
    3. 影响

      1. 对于服务端:服务端需保存每个用户Session,且Session会过期(默认关闭浏览器后Session过期,当然服务端也可自定义过期时间),服务端需定期清理过期的Session,影响服务器性能。
      2. 对于安全测试者:一旦用户Cookie被窃取,且服务端Session并未过期。那攻击者就可以利用用户Cookie,实现 用户登录、伪造用户操作等行为,这也是XSS、CSRF攻击的原理。
        补:基于Session - Cookie实现的攻击思路往往是窃取被保存至客户端本地的Cookie,但我们知道能实现身份认证的仅为Cookie中的Session ID,那Session ID可不可以被破解伪造呢?(emmm。。。来自小白的提问)
  6. Token

    1. 概述:工作机制&实现功能,与Session - Cookie类似,不过Token往往会携带完整的用户身份认证信息。
    2. 鉴权流程
      1. 请求受限内容,客户端输入账户&密码。
      2. 服务端收到账户密码后,依据后端逻辑,生成加密后的Token,并返回给客户端。
      3. 客户端收到Token并将其保存至本地浏览器。(Token除了被保存到浏览器Cookie外,也可以被存储至localStorage、sessionStorage等。)
      4. 当客户端再次对受限内容请求时,请求包会默认携带Token。
      5. 服务端接收并验证Token是否有效,实现身份鉴权。
    3. 影响
      1. 对于服务端:由于Token内已经携带用户的完整信息,相较于Session - Cookie,服务端要存储每一个用户的会话,Token则无需存储,服务端只需接收并验证即可。节约服务端性能。
      2. 对于安全测试者:Token往往在生成时会设置过期时间,一般过期时间较短。相较于Session - Cookie,更加安全。
  7. JWT

    1. 概述:全称JSON Web Token,其实从名字就可以看出JWT也是Token鉴权的一种。

    2. 鉴权流程:同Token。

    3. 特征
      由于JWT具有很明显的特征,因此在这里额外聊一下。
      JWT的组成:Header . Payload . Signature(头部 . 载荷 . 签名)
      Header: 存储JWT的基本信息,如Token类型、签名算法等,并进行base64编码。给一个JWT的官方示例:

      // Header经base64编码
      eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
      // 解码后
      {
        "alg": "HS256",// jwt签名算法
        "typ": "JWT"// token类型
      }
      

      Payload:存储JWT&用户的有效信息,如JWT过期时间、用户id、用户名等,并进行base64编码。同样是官方示例:

      // Payload经base64编码
      eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
      // 解码后
      {
        "sub": "1234567890",
        "name": "John Doe",
        "iat": 1516239022
      }
      // 我们称:sub、name、iat这些字段为声明
      // 其中sub、iat为JWT注册声明,而每一个注册声明都有其特定含义。
      

      这里对JWT注册声明进行列举

      字段名含义
      iss签发者 (Issuer),表示 JWT 的创建者或签发服务的标识。
      sub主题 (Subject),表示 JWT 的主题,一般是用户的唯一标识符。
      aud受众 (Audience),表示 JWT 的接收者,通常是应用程序的标识。
      exp过期时间 (Expiration Time),表示 Token 的到期时间,单位为秒的时间戳。
      nbf生效时间 (Not Before),表示 Token 的有效开始时间。在该时间之前,JWT 无效。
      iat签发时间 (Issued At),表示 JWT 的签发时间。
      jtiJWT ID,表示 Token 的唯一标识符,常用于避免重复使用 Token(防止重放攻击)。

      Signature:验证JWT完整性,Signature计算方式:

      Header记录的加密算法(
      	base64UrlEncode(header) + "." + base64UrlEncode(payload),
      	secrect// 密钥
      )
      // 官方示例的Signature
      SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
      

      将这三部分通过 “.” 组合,构成完整的JWT

      eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
      

      了解其组成后,也就可以得出JWT特征:eyJxxxxxx.eyJxxxxxx.signature。

    4. 影响

      1. 对于服务端:同Token。
      2. 对于安全测试者:由于JWT前两part仅进行base64编码,则一旦JWT算法密钥被获取&爆破,则可实现伪造JWT。
  8. OAuth

    1. 概述:OAuth作为一个授权框架,允许用户在不暴露其凭证的情况下,授权第三方应用访问其在另一个服务提供商上的受保护资源。简单来说,使用OAuth,用户就可以在不向第三方泄露自己账户密码的情况下,使第三方应用实现部分资源访问。
      举个栗子:使用QQ登录百度,执行授权操作后,百度在未获取到QQ账户&密码的情况下 1. 实现了登录。2. 通过获取到的QQ账户信息创建了百度账户。

    2. 授权流程
      注:由于OAuth2.0标准定义了四种授权方式,分别为授权码、隐藏式、密码式和客户端凭证。其中授权码方式是如今被应用最多的,因此本文仅介绍使用授权码方式的授权流程,如果想了解其余授权方式可参考:
      https://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html

      1. 在OAuth授权中共有三位角色,用户所属的客户端,用户所访问的第三方应用,第三方应用需要请求资源的服务端(在该服务端中又分别存在授权服务,资源服务)。

      2. 当客户端访问的第三方应用想要获取服务端的资源时,需先向服务端授权服务器备案并获取其给予的client_id & client_secrect。

      3. 随后客户端需为第三方应用向服务端授权服务器申请授权码,申请成功后服务端授权服务器将授权码转发给第三方应用。

        # 授权码申请
        /oauth/authorize?client_id=xxxx&response_type=code&scope=read&redirect_uri=http://"第三方"
        # 其中reponse_type表示授权方式
        # scope表示授权范围
        # redirect_uri表示重定向地址,一般为第三方应用地址
        
        # 授权码申请成功后,随redircet_uri返回给第三方应用
        http://"第三方"/callback?code=authorationcode
        # 其中code值为授权码
        
      4. 第三方应用拿到授权码后,再向服务端授权服务器申请Token,申请成功后服务端将Token返回给第三方应用。由于Token仅在第三方应用与服务端之间传递,无法被用户窃取,更加安全。

        # 第三方向授权服务器申请Token
        /oauth/token?client_id=xxxx&client_secrect=xxxx&grant_type=authoration_code&code=authorationcode&redirect_uri=http://"第三方"/
        # 其中grant_type为授权方式
        # code为第三方应用获取的授权码
        
        # 申请成功后,授权服务器将token返回给第三方应用
        
      5. 随后第三方应用凭借token向服务端资源服务器获取资源。

    3. 影响

      1. 对于服务端:解决了服务端在访问受限资源时的身份鉴权问题。
      2. 对于安全测试者:针对OAuth框架的安全问题留给后面来讨论吧,现在只需对其有基本认知即可。
        (ps:其实是我没见过)

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

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

相关文章

7.OPEN SQL

总学习目录请点击下面连接 SAP ABAP开发从0到入职,冷冬备战-CSDN博客 目录 ​编辑 1.OPEN-SQL 简单回顾 R3体系 OEPN-SQL 2.OPEN-SQL 读取数据 2.1Select 语句 select 1条数据 多条数据与into AS别名 2.2INTO 结构体 内表 例子 2.3FROM 选择动态表…

PLC网关,plc远程通信 —— 跨越距离远程控制运维升级

在日新月异的工业4.0时代,智能化、网络化已成为制造业转型升级的关键词。其中,PLC(可编程逻辑控制器)作为工业自动化控制的核心设备,其远程通信技术的突破,正引领着一场前所未有的工业变革。今天&#xff0…

Python-基于Pygame的小游戏(天空之战)(一)

前言:不久前接触了Python的游戏制作的相关第三方库,于是学习了pygame的相关内容,想制作一款基于pygame的小游戏。因为还不太熟悉游戏制作和pygame,部分内容我参考了《Python-从入门到精通》这本书。那么好,话不多说,我…

CV(4)--边缘提取和相机模型

前言 仅记录学习过程,有问题欢迎讨论 边缘提取(涉及语义分割): 图象的边缘是指图象局部区域亮度变化显著的部分,也有正负之分,暗到亮为正 求边缘的幅度:sobel,Canny算子 图像分高频分量和低…

cocos creator 的 widget组件的使用及踩坑

以下的内容基于cocos creator 3.8版本,如有错误,恳请指出。 👉官方文档的指引 应用:以上官方指引有非常清晰的使用方式,接下来说明一些注意事项: 1、与canvas搭配的使用,解决多分别率适配问题。…

九个任务调度框架

一、背景介绍 说到定时任务,相信大家都不陌生,在我们实际的工作中,用到定时任务的场景可以说非常的多,例如: 双 11 的 0 点,定时开启秒杀每月1号,财务系统自动拉取每个人的绩效工资&#xff0…

Qt6开发自签名证书的https代理服务器

目标:制作一个具备类似Fiddler、Burpsuit、Wireshark的https协议代理抓包功能,但是集成到自己的app内,这样无需修改系统代理设置,使用QWebengineview通过自建的代理服务器,即可实现https包的实时监测、注入等自定义功能…

【深度学习项目】目标检测之YOLO系列详解(一)

介绍 YOLO(You Only Look Once)是一种实时目标检测算法,由Joseph Redmon等人提出。与传统的基于滑动窗口和区域提案的目标检测方法不同,YOLO将目标检测问题框架化为一个单一的回归问题,直接从图像像素预测边界框和类别…

SpringBoot + minio + kkfile 实现文件预览

1、容器安装kkfileviewer 1.1 下载文件 这里以kkfile 4.4.0-beta版本为例 下载kkfile安装包及Dockerfile: https://codeup.aliyun.com/6254dee9a923b68581caaf50/kkfileviewer.git 1.2、构建镜像 git clone https://codeup.aliyun.com/6254dee9a923b68581caaf50…

HCIE之OSPF基础(十九)

OSPF理论 一、OSPF基本原理(回顾)1. 邻居建立1.1(411)HELLO包影响邻居建立的因素。1.2 其它影响邻居建立的因素:1.3 基本配置1.4 验证命令 2 DR选举2.1 为什么选?2.2 在哪选?2.3 怎么选&#xf…

python 基于 docx 文件模板生成 docx 或 PDF 文件

需求背景 提供一个Word文档模板,使用python程序替换里边的占位符,替换内容包括文本和图片,然后输出docx或者PDF文件。 功能演示 输入示例 输出示例 实现程序 import os import shutil import subprocess import timefrom docx import Doc…

CSS 实现带tooltip的slider

现代 CSS 强大的令人难以置信 这次我们来用 CSS 实现一个全功能的滑动输入器,也就是各大组件库都有的slider,效果如下 还可以改变一下样式,像这样 特别是在拖动时,tooltip还能跟随拖动的方向和速度呈现不同的倾斜角度&#xff0c…

MybatisPlus-扩展功能

代码生成 在使用MybatisPlus以后,基础的Mapper、Service、PO代码相对固定,重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表结构生成PO、Mapper、Service等相关代码。只不过代码生成器同样要编码使用,也很麻烦。 这里…

中后台管理信息系统:Axure12套高效原型设计框架模板全解析

中后台管理信息系统作为企业内部管理的核心支撑,其设计与实现对于提升企业的运营效率与决策能力具有至关重要的作用。为了满足多样化的中后台管理系统开发需求,一套全面、灵活的原型设计方案显得尤为重要。本文将深入探讨中后台管理信息系统通用原型方案…

40 基于单片机的温湿度检测判断系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,采用dht11温湿度传感器检测温湿度, 通过lcd1602显示屏各个参数,四个按键分别可以增加温湿度的阈值, 如果超过阈值,则…

SAP ABAP-日期格式问题 SAP内部错误,反序列化JSON字符串时发生异常 值 20241215 不是根据 ABAP 的 XML 格式的有效日期

SAP ABAP-日期格式问题 SAP内部错误,反序列化JSON字符串时发生异常 值 20241215 不是根据 ABAP 的 XML 格式的有效日期 在SAP内部用 YYYYMMDD没有问题 外部传入参数

深度学习——激活函数、损失函数、优化器

深度学习——激活函数、损失函数、优化器 1、激活函数1.1、一些常见的激活函数1.1.1、sigmoid1.1.2、softmax1.1.3、tanh1.1.4、ReLU1.1.5、Leaky ReLU1.1.6、PReLU1.1.7、GeLU1.1.8、ELU 1.2、激活函数的特点1.2.1、非线性1.2.2、几乎处处可微1.2.3、计算简单1.2.4、非饱和性1…

YOLOv5-7.0训练过程中出现报错Example: export GIT_PYTHON_REFRESH=quiet

出现报错: This initial message can be silenced or aggravated in the future by setting the $GIT_PYTHON_REFRESH environment variable. Use one of the following values: - quiet|q|silence|s|silent|none|n|0: for no message or exception - warn…

发布/部署WebApi服务器(IIS+.NET8+ASP.NETCore)

CS软件授权注册系统-发布/部署WebApi服务器(IIS.NET8ASP.NETCore) 目录 本文摘要VS2022配置发布VS2022发布WebApiIIS服务器部署WebApi 将程序文件复制到云服务器添加网站配置应用程序池配置dns域名配置端口阿里云ECS服务器配置19980端口配置https协议 (申请ssl证书)测试WebAp…

从零开始:如何在.NET Core Web API中完美配置Swagger文档

目录 新建项目 RestFul Swagger配置 注释展示 版本控制 Token传值 方法封装 新建项目 打开visual studio创建新项目,这里我们选择.net core web api模板,然后输入项目名称及其解决方案创建新项目 这里使用配置一些其他信息,根据自己情…