[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 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 曼亿点 原创 👨💻 收录于专栏:…...
告别PWM!用STM32串口轻松驱动幻尔16路舵机控制板(附完整代码)
STM32串口驱动幻尔16路舵机控制板的实战指南 从PWM到串口:舵机控制的技术演进 记得我第一次尝试用STM32控制机械臂时,光是配置PWM定时器就花了两天时间。每个舵机需要独立的PWM通道,复杂的定时器分频计算,还有那令人头疼的占空比换…...
告别死记硬背:用GitHub笔记和实战思维重新理解电路与电子学
告别死记硬背:用GitHub笔记和实战思维重新理解电路与电子学 电路与电子学这门课,常常让计算机专业的学生又爱又恨。爱的是它揭示了计算机硬件底层的奥秘,恨的是那些繁琐的公式和抽象的概念。但问题真的出在课程本身吗?或许我们需…...
3步解决Realtek 8922AE WiFi 7网卡驱动固件不匹配实战指南
3步解决Realtek 8922AE WiFi 7网卡驱动固件不匹配实战指南 【免费下载链接】rtw89 Driver for Realtek 8852AE, an 802.11ax device 项目地址: https://gitcode.com/gh_mirrors/rt/rtw89 文章目录 【问题定位】WiFi 7网卡驱动加载失败的核心原因【环境诊断】三层级驱动问…...
Binary Ninja:开源二进制逆向工程的Python解决方案
Binary Ninja:开源二进制逆向工程的Python解决方案 【免费下载链接】deprecated-binaryninja-python Deprecated Binary Ninja prototype written in Python 项目地址: https://gitcode.com/gh_mirrors/de/deprecated-binaryninja-python 你是否曾面对一个陌…...
Obsidian 完全指南:从入门到精通
一、简介 Obsidian 是一款基于 Markdown 的本地知识管理工具,以双向链接和插件生态著称。 什么是 Obsidian Obsidian 是一款基于本地 Markdown 文件的知识管理和笔记工具。所有笔记以纯文本 .md 文件存储在本地,数据完全由用户掌控,无需依赖云端服务。也可以平替Typora。 …...
glTF和glb格式与模型渲染,CesiumJS 中的 glTF 渲染系统以该类为核心
CesiumJS 中的 glTF 渲染系统以该类为核心,该类为加载和渲染 3D 资产提供了高层次的抽象。该系统支持 glTF 2.0 规范,包括多种压缩、元数据和实例化的扩展。该架构采用模块化的“流水线阶段”设计,将 glTF 组件转换为 GPU 可用的绘制命令。Mo…...
正式支持 Spring Boot 4、新增 Jackson3/Snack4 插件适配
目前最新版本 v1.45.0 已推送至 Maven 中央仓库 🎉,大家可以通过如下方式引入: <!-- Sa-Token 权限认证 --> <dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-boot4-starter</artifa…...
科研论文翻译难题?试试MathTranslate的公式无损转换方案
科研论文翻译难题?试试MathTranslate的公式无损转换方案 【免费下载链接】MathTranslate translate scientific papers in latex, especially arxiv papers 项目地址: https://gitcode.com/gh_mirrors/ma/MathTranslate 学术研究中,英文文献阅读往…...
效率利器:用快马平台快速打造openclaw-zero-token成本对比分析工具
最近在团队里做AI项目时,经常遇到一个头疼的问题:API调用成本太高。特别是当需要频繁测试和迭代时,代币消耗就像流水一样。直到发现了openclaw-zero-token技术,才意识到原来有这么多优化空间。为了更直观地对比传统调用和zero-tok…...
Windows 11终极优化指南:用Win11Debloat免费提升系统性能51%
Windows 11终极优化指南:用Win11Debloat免费提升系统性能51% 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter …...
