[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 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 曼亿点 原创 👨💻 收录于专栏:…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...
UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...
