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

附:完整笔记目录~
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.mzph.cn/pingmian/64235.shtml

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

相关文章

Linux 中的 mkdir 命令:深入解析

在 Linux 系统中,mkdir 命令用于创建目录。它是文件系统管理中最基础的命令之一,广泛应用于日常操作和系统管理中。本文将深入探讨 mkdir 命令的功能、使用场景、高级技巧,并结合 GNU Coreutils 的源码进行详细分析。 1. mkdir 命令的基本用法…

【实验】【H3CNE邓方鸣】交换机端口安全实验+2024.12.11

实验来源:邓方鸣交换机端口安全实验 软件下载: 华三虚拟实验室: 华三虚拟实验室下载 wireshark:wireshark SecureCRT v8.7 版本: CRT下载分享与破解 文章目录 dot1x 开启802.1X身份验证 开启802.1X身份验证,需要在系统视图和接口视…

OpenCV实验篇:识别图片颜色并绘制轮廓

第三篇:识别图片颜色并绘制轮廓 1. 实验原理 颜色识别的原理: 颜色在图像处理中通常使用 HSV 空间来表示。 HSV 空间是基于人类视觉系统的一种颜色模型,其中: H(Hue):色调,表示颜色…

vue2-请求代理,动态target

当你在 Vue 2 项目中将 axios 的 baseURL 配置为 http://192.168.11.111:8762 时,所有请求都被认为是绝对路径请求,这种请求会直接发送到目标服务器, 跳过开发服务器的代理。 baseURL具体值 这就是为什么代理配置无法拦截 /exportPdf 的原因…

算法-字符串-76.最小覆盖子串

一、题目 二、思路解析 1.思路: 滑动窗口!!! 2.常用方法: 无 3.核心逻辑: 1.特殊情况:s或t是否为空字符串 if(snull||tnull)return ""; 2.声明一个字符数组——用于记录对应字符出现…

BatchNorm 与 LayerNorm

文章目录 1. BatchNorm批量归一化2. LayerNorm层归一化3. BatchNorm 和 LayerNorm 对比4. BatchNorm 和 LayerNorm 怎么选择References 今天重看Transformer,发现里面提到了BatchNorm和LayerNorm两种归一化方法,在这儿做一下总结和整理。 1. BatchNorm批…

《机器学习》2.4假设检验 t分布 F分布

目录 t发布 注意是这个东西服从t分布 数据服从t分布通常是在以下情况下: 以下是一些具体的例子,说明在何种情况下数据会服从t分布: t检验 交叉验证t检验 样本方差​编辑 F分布(fisher Friedman检验是一种非参数统计方法&a…

java aspose word 模板根据数据导出pdf

支持以功能&#xff1a; 1、字符串占位符替换。 2、占位符循环替换。 3、图片替换。 4、基础图标&#xff0c;折现、饼图、柱状图。 本案例运行环境&#xff1a; 1、aspose word21.1版本。 2、jdk 18。 话不多说直接上代码。 <!-- 图表相关 --><dependency><gro…

Linux高性能服务器编程 | 读书笔记 |9.定时器

9. 定时器 网络程序需要处理定时事件&#xff0c;如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件&#xff0c;有效地组织这些定时事件&#xff0c;使其在预期的时间被触发且不影响服务器的主要逻辑&#xff0c;对于服务器的性能有至关重要的影响。为此&…

QT 国际化(翻译)

QT国际化&#xff08;Internationalization&#xff0c;简称I18N&#xff09;是指将一个软件应用程序的界面、文本、日期、数字等元素转化为不同的语言和文化习惯的过程。这使得软件能够在不同的国家和地区使用&#xff0c;并且可以根据用户的语言和地区提供本地化的使用体验。…

3D 生成重建034-NerfDiff借助扩散模型直接生成nerf

3D 生成重建034-NerfDiff借助扩散模型直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 感觉这个论文可能能shapE差不多同时期工作&#xff0c;但是shapE是生成任意种类。 本文提出了一种新颖的单图像视图合成方法NerfDiff&#xff0c;该方法利用神经辐射场 …

【CNN卷积神经网络算法】卷积神经网络

卷积神经网络整体架构 总结 输入层&#xff1a;原始数据&#xff08;图像&#xff09; 例如可以输入一张RGB图像&#xff0c;其可以标示为一个三维矩阵&#xff0c;宽W高H和通道数C3对应着RGB卷积层&#xff1a;提取局部特征&#xff0c;变换输入数据为丰富的特征图 网络使用多…

HarmonyOS Next 元服务新建到上架全流程

HarmonyOS Next 元服务新建到上架全流程 接上篇 这篇文章的主要目的是介绍元服务从新建到上家的完整流程 在AGC平台上新建一个项目 链接 一个项目可以多个应用 AGC新建一个元服务应用 新建一个本地元服务项目 如果成功在AGC平台上新建过元服务&#xff0c;那么这里会自动显…

Mac/Windows端长期破解myBase8方法(无需安装火绒)

提醒 不管哪个端&#xff0c;都需要先退出myBase。 Mac 进入用户根目录/Users/c0ny100&#xff0c;即下边是Macintosh HD > 用户 > [你的用户名]这个界面然后按ShiftCommond.&#xff0c;显示隐藏文件。找到.Mybase8.ini文件 打开.Mybase8.ini文件&#xff0c;删除Fir…

【网络安全】【Kali Linux】简单ICMP主机探测

一、参考资料 《Python安全攻防——渗透测试实战指南》&#xff0c;吴涛 等编著&#xff0c;机械工业出版社&#xff0c;2021年10月 二、探测原理 ICMP&#xff08;ping命令&#xff09; 三、脚本编写 1、导入所需的库&#xff1a; 2、扫描功能函数&#xff1a; 3、主函数…

Oracle进行exp导出密码中有特殊字符报EXP-00056和ORA-12154错处理

今天&#xff0c;业务人员反馈&#xff0c;在本地进行exp导出时报错&#xff0c;报错内容如下&#xff1a; 在Oracle密码中有特殊字符时&#xff0c;需要加引号&#xff0c;但引号怎么加呢&#xff1f;总结如下&#xff1a; 1、在windows系统中 exp 用户名/“““密码”””n…

MVC流程分析

DisaptcherServlet本质是servlet&#xff0c;执行init()方法&#xff0c;自启动底层执行代码&#xff0c; 作用&#xff1a; 1、读取springmvc配置文件&#xff0c;创建Controller对象&#xff0c;放入容器中&#xff0c;map<"id",对象> 2、接收用户请求&#…

fiddler设置抓取https,还抓取不到https如何解决?

一、清楚 C:\Users\Admin\AppData\Roaming\Microsoft\Crypto\RSA 目录下所有文件&#xff08;首次安装fiddler请忽略&#xff09; 二、清除电脑上的根证书&#xff0c;WINR快捷键&#xff0c;输入&#xff1a;certmgr.msc&#xff0c; 然后回车&#xff0c;查找所有fiddler证书…

【知识】总体标准差和样本标准差有什么区别

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 总体标准差和样本标准差之间的区别主要在于它们的计算方式&#xff0c;特别是在分母的选择上。这种差异是因为我们通常在实际应用中并不总是能够得到整…

.NET 9 已发布,您可以这样升级或更新

.NET 9 已经发布&#xff0c;您可能正在考虑更新您的 ASP.NET Core 应用程序。 我们将介绍更新应用程序所需的内容。从更新 Visual Studio 和下载 .NET SDK 到找出可能破坏应用程序的任何重大更改。 下载 .NET 9 SDK 这些是下载 .NET 9 SDK 所需的步骤。 更新 Visual Studi…