[Web安全架构] HTTP协议
文章目录
- 前言
- 1. HTTP
- 1 . 1 协议特点
- 1 . 2 URL
- 1 . 3 Request请求报文
- 1 . 3 .1 请求行
- 1 . 3 .2 请求头
- 1 . 3 .3 请求正文
- 1 . 3 .4 常见传参方式
- 1 . 4 Response响应报文
- 1 . 4 .1 响应行
- 1 . 4 .2 响应头
- 1 . 4 .3 响应正文
- 2. Web会话
- 2 .1 Cookie
- 2 .2 Session
- 2 .3 固定会话攻击
前言
Web机制:客户端(用户、浏览器)+ 服务端(Web容器+中间件+数据库)。
1. HTTP
HTTP(Hyper Text Transfer Protocol,超文本传输协议)是浏览器与服务端之间的通信协议。
HTTP将HTML文档传输到Web历览器中进行访问。HTTP是一个请求和响应的协议,浏览器发出请求,服务端向请求做出回应。
HTTP在网络中传输是以明文的形式,所以就会产生明文传输漏洞。为了解决这个问题,可以使用加强版的HTTPS协议,其在HTTP的基础上加上了一个安全套接字层SSL,但也会存在如 HTTPS 降级等漏洞问题。
HTTP 默认端口为80,HTTPS 默认端口为 443。
1 . 1 协议特点
HTTP是一个请求和响应的协议,浏览器发出请求,服务端向请求做出回应。
- 采用B/S架构模式(浏览器/服务器)
- 协议是无状态的协议
- 浏览器向服务器发出请求时,只需传输
请求方法和请求路径 - 允许传输任意类型的数据对象
1 . 2 URL
URL(Uniform Resource Locator,统一资源定位符),是全球唯一的,用来告诉Web容器,浏览器请求资源的路径。
标准格式:
schema://login:password@address:port/path/to/resource/?query_string#fragment
| URL参数 | 说明 | 实例 |
|---|---|---|
| schema | 协议 | http |
| login:password | 用户名:密码 | |
| address | 服务器地址IP | 192.168.109.100 |
| port | 端口号 | 80 |
| path/to/resource | 请求资源路径 | /cms/index.html |
| query_string | 请求参数 | name=dai |
| fragment | 锚点 |
例子:
# http
http://192.168.109.100/cms/
# ftp
ftp://ftpuser:ftppassword@192.168.109.100
URL编码:URL从Path开始只能出现A-Za-z0-9,-_.~其他符号都会被URL编码。
| 符号 | URL编码 |
|---|---|
| # | %23 |
| %20 | |
| & | %26 |
| > | %3e |
1 . 3 Request请求报文
HTTP 请求报文由 请求行、请求头、请求正文 三部分组成。下面是一个完整的HTTP请求报文:
GET /cms/ HTTP/1.1
Host: 192.168.109.100
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.109.100/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close
1 . 3 .1 请求行
请求行是报文的第一行,由空格字符将其分为三部分,所以空格等字符不能随便出现。
GET /cms/ HTTP/1.1
说明:
| 列数 | 说明 | 例子 |
|---|---|---|
| 1 | 请求方法 | GET |
| 2 | 资源路径 | /cms/ |
| 3 | 协议版本 | HTTP/1.1 |
请求方法总结:
| 请求方法 | 说明 |
|---|---|
| GET | 用于请求服务器发送某个资源 |
| POST | 提交表单或上传文件 |
| HEAD | 请求资源,但只请求头部,不请求正文 |
| OPTIONS | 测试服务器所支持的方法 |
| TRACE | 回显浏览器的请求 |
| PUT | 向服务器写入文档 |
| DELETE | 请求服务器删除指定资源 |
1 . 3 .2 请求头
从请求报文第二行开始到第一个空行为止的内容。请求头包含了很多字段。
| 请求头字段 | 说明 |
|---|---|
| Host | 指定被请求资源的服务器地址和端口号 |
| User-Agent | 浏览器信息,浏览器指纹 |
| Referer | 当前URL的上一个URL |
| Cookie | 请求者的身份信息,类似于身份证 |
| Content-Type | 指明实体的介质类型 |
| Content-Length | 指明实体的正文长度 |
| Authorization | 基本认证 |
1 . 3 .3 请求正文
一般为POST方法,第一个空行以后的内容。
1 . 3 .4 常见传参方式
-
POST传参
提交的参数放在请求正文中。
-
GET传参
向服务器提交的参数存放在URL中,例如
?name=dai,向服务器传输多个参数用& 连接。
1 . 4 Response响应报文
响应报文由 响应行、响应头、响应报文 三部分组成。下面是一个完整的HTTP响应报文:
HTTP/1.1 200 OK
Date: Mon, 05 Aug 2024 02:43:55 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 7314
Connection: close
Content-Type: text/html; charset=utf-8<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
。。。。。
1 . 4 .1 响应行
响应报文的第一行。
HTTP/1.1 200 OK
说明:
| 列数 | 说明 | 例子 |
|---|---|---|
| 1 | 协议版本 | HTTP/1.1 |
| 2 | 响应状态码 | 200 |
| 3 | 描述短句 | OK |
常见响应状态码:
| 状态码 | 类型 | 常见状态码 |
|---|---|---|
| 1XX | 信息性状态码 | – |
| 2XX | 成功状态码 | 200、201 |
| 3XX | 重定向状态码 | 302、304 |
| 4XX | 客户端错误状态码 | 404、403 |
| 5XX | 服务端错误状态码 | 500 |
1 . 4 .2 响应头
从响应报文第二行开始到第一个空行为止的内容。响应头包含了很多字段。
Date: Mon, 05 Aug 2024 02:43:55 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 7314
Connection: close
Content-Type: text/html; charset=utf-8
说明:
| 响应头字段 | 说明 |
|---|---|
| Date | 时间 |
| Server | Web服务器指纹 |
| Refresh | 服务器端告知浏览器定时刷新浏览器 |
| Content-Length | 正文长度 |
| Connection | 连接 |
| Content-Type | 响应正文的类型 |
| Set-Cookie | 服务器向浏览器端写入Cookie信息 |
1 . 4 .3 响应正文
浏览器接收到的HTML代码,服务器返回的资源内容。
2. Web会话
当我们进行网购时,选择商品、加入购物车、付款这一系列流程都是需要保持用户登录状态的。Web会话技术就是用来管理Web应用程序在多个页面和请求之间保持用户登录状态的一种技术。
HTTP协议本身是无状态的协议,所以HTTP协议不会记录会话状态,不同的请求之间是没有任何联系的。所以我们希望在浏览器与服务器交互的这个会话期间,服务器可以保持对浏览器会话的识别,也就是保持HTTP的状态。
2 .1 Cookie
Cookie(Cookies)技术就是我们用来辨别用户身份,进行会话跟踪而存储在本地终端上的一段文本。它由服务器在进行HTTP响应的时候发送给浏览器,每当浏览器向服务器发送请求的时候,它会自动将响应的Cookie包含在请求中,如果服务器识别了这个自动发送的Cookie信息,那么服务器就识别了会话。
2 .2 Session
Session 是一种可以保留更多信息在服务端的一种技术,服务器会为每一个客户端开辟一块内存空间(Session对象),客户端在发送请求的时候,都可以使用之间的Session。
2 .3 固定会话攻击
-
窃取
F12,在命令行执行。
alter(document.cookie)


-
获取到Cookie信息
username=admin; userid=1; PHPSESSID=mcm25gpg74qp4gpn9sv54tj754 -
进行欺骗
在没有Cookie信息的时候,我们将这三条命令(根据Cookie进行替换)在命令行执行,再次刷新就可以进去。
document.cookie = "username=admin;"; document.cookie = "userid=1;"; document.cookie = "PHPSESSID=mcm25gpg74qp4gpn9sv54tj754";
相关文章:
[Web安全架构] HTTP协议
文章目录 前言1. HTTP1 . 1 协议特点1 . 2 URL1 . 3 Request请求报文1 . 3 .1 请求行1 . 3 .2 请求头1 . 3 .3 请求正文1 . 3 .4 常见传参方式 1 . 4 Response响应报文1 . 4 .1 响应行1 . 4 .2 响应头1 . 4 .3 响应正文 2. Web会话2 .1 Cookie2 .2 Session2 .3 固定会话攻击 前…...
mysql数据库之运算符
安全等于运算符(<=>) 这个操作符和 = 操作符执行相同的比较操作,不过<=>可以用来判断NULL值。在两个操作数均为NULL时,其返回值为1而不为NULL;而当一个操作数为NULL时,其返回值为0而不为NULL。 下面分别是 SELECT NULL <=>1 SELECT 1<=>0 SEL…...
Spark轨迹大数据高效处理_计算两经纬度点间的距离_使用Haversine formula公式
开发背景 接上文我求的两经纬度点之间的方位角,我的需求里还提到了要计算距离,当然这个距离也是为后面的需求做铺垫的,因此需要求两个经纬度电之间的距离。 不要妄想用勾股定理求出来,实际上距离的计算还是稍微复杂些。这里使用的…...
[C++] : std::copy_n
std::copy_n 是 C 标准库中的一个算法,用于将指定数量的元素从一个输入范围复制到一个输出范围。那这就提供了很灵活的用法了。下面我们举例说明。 语法 template< class InputIt, class Size, class OutputIt > OutputIt copy_n(InputIt first, Size count…...
centos上传工具
yum install lrzsz 安装完成之后 作用是 输入 rz 可以本地上传文件...
【C++】vector习题
一、杨辉三角 class Solution { public:vector<vector<int>> generate(int numRows) {} }; 这里给你一个vector<vector<int>>类型 也就是说vector中的各个数据,存的是各个不同的vector 思路:先给vector开空间,然后…...
Webpack Bundle Analysis:减少包体积的技巧
Webpack 是一个流行的 JavaScript 模块打包器,它能够将项目中各种类型的模块和资源打包成一个或多个 bundle。然而,随着项目的复杂性增加,bundle 的体积也会随之增大,这可能导致加载时间变长,影响用户体验。 Webpack …...
如何利用 ChatGPT 提高工作效率?
内容创作与总结: 写作辅助:可以帮助撰写文章、报告、邮件等各种文本,如为招商银行写宣传文案、写论文、写故事等。学习材料生成:能够生成学习材料,如摘要、抽认卡和测验,帮助学生复习和学习课程。评估和考核…...
使用 Redisson 、Redis实现分布式锁
Redisson 是基于 Redis 实现的一个 Java 框架,为开发者提供了更方便、更高级的 API 和功能。 Redisson 优点: 简单易用的 API:简化了 Redis 操作的代码编写,使开发者能够更专注于业务逻辑。 分布式特性支持:如分布式…...
Typro + PicGo 图床 + Docsify + GitHub Pages,玩转个人知识库搭建,写给小白的建站入门课
自动开了这个号以后,陆陆续续写了很多干货文章,一方面是可以帮助自己梳理思路,另一方面也方便日后查找相关内容。 但是,我想检索某个关键词是在之前哪篇文章写过的,就有点捉急了。CSDN 还好,可以检索到相关…...
多角度文字识别:应对复杂环境的智能解决方案
多角度文字识别(Multi-Angle Text Recognition)是指在不同视角、不同光照条件和不同背景下对文本进行识别的技术。这项技术在许多应用场景中都非常重要,例如自动驾驶、智能监控、文档数字化等。以下是关于多角度文字识别的一些关键点和摘要&a…...
笔记:简单介绍WPF中RenderTransform,LayoutTransform, VisualTransform区别
一、目的:简单介绍WPF中RenderTransform,LayoutTransform, VisualTransform区别 在 WPF 中,RenderTransform、LayoutTransform 和 VisualTransform 是用于对控件进行变换的属性,他们的主要区别是什么,如何选…...
【AI大模型】LangChain框架:示例选择器与输出解析器携手,编织NLP高效精准之网
文章目录 前言一、示例选择器1.介绍及应用2.自定义示例选择器案例:AI点评姓名 3.基于长度的示例选择器案例:对输入内容取反 4.基于最大边际相关性(MMR)的示例选择器案例:得到输入的反义词 5.基于n-gram重叠的示例选择器6.综合案例 二、输出解…...
苹果电脑玩的游戏有哪些 Mac电脑怎么玩Windows游戏 苹果电脑可以装模拟器玩游戏吗
苹果电脑虽然在游戏生态上可能不及Windows平台那么广泛,但其强大的硬件和macOS系统的优化,足以支持一系列高质量游戏的流畅运行。从策略游戏《文明VI》到动作冒险游戏《黑暗之魂III》,再到解谜游戏《传送门2》和角色扮演游戏《神界࿱…...
【mathtype】word中如何输入4×4的矩阵,甚至阶数更多
在写论文或者使用word操作的时候,我们可能会使用矩阵插入我们所写的word中,今天小编就分享一下如何在word中输入矩阵。首先,我们word中需要安装mathtype的插件。 ①打开word,鼠标点击mathtype,再点击内联 ② 出现以下…...
ByteArrayOutputStream
ByteArrayOutputStream 是 Java 中的一个类,它属于 java.io 包。这个类实现了一个字节输出流,其中数据被写入到一个字节数组中。这个缓冲区在数据写入时会自动增长,以适应需要存储的数据量。下面是对 ByteArrayOutputStream 的详细解释: 构造函数 ByteArrayOutputStream…...
使用CLIP模型进行零样本图像分类的分步指南
零样本学习允许AI系统对未明确训练过的类别进行图像分类,标志着计算机视觉和机器学习的重大进步。本文将介绍使用CLIP实现零样本图像分类的详细分步指南,从环境设置到最终的图像处理和分类。我们首先介绍零样本学习的概念及其在现代AI应用中的重要性。然后深入探讨CLIP模型的概…...
Llama 3.1用了1.6万个英伟达H100 GPU,耗费......
目录 Llama 3.1发布简介 Llama 3.1模型规模与训练 大模型企业发展面临的问题与困境 算力和能耗算力方面 数据和资金方面 技术和人才方面 Llama 3.1发布简介 当地时间 2024年 7月 23号,Meta 公司发布了迄今为止最强大的开源 AI 模型 Llama 3.1。该模型不仅规模…...
学习c语言第24天(练习)
编程题 第一题 最大公约数最小公倍数求和 //求最大公约数和最小公倍数之和 //暴力求解 //int main() //{ // int n 0; // int m 0; // while (scanf("%d %d", &n, &m)2) // { // int min n < m ? n : m; // int max n > m ? n : m; //…...
【微信小程序开发】——奶茶点餐小程序的制作(一)
👨💻个人主页:开发者-曼亿点 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 曼亿点 原创 👨💻 收录于专栏:…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
