当前位置: 首页 > news >正文

[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服务器地址IP192.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 常见传参方式
  1. POST传参

    提交的参数放在请求正文中。

  2. 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时间
ServerWeb服务器指纹
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 固定会话攻击

  1. 窃取

    F12,在命令行执行。

    alter(document.cookie)
    

在这里插入图片描述
在这里插入图片描述

  1. 获取到Cookie信息

    username=admin; userid=1; PHPSESSID=mcm25gpg74qp4gpn9sv54tj754
    
  2. 进行欺骗

    在没有Cookie信息的时候,我们将这三条命令(根据Cookie进行替换)在命令行执行,再次刷新就可以进去。

    document.cookie = "username=admin;";
    document.cookie = "userid=1;";
    document.cookie = "PHPSESSID=mcm25gpg74qp4gpn9sv54tj754";
    

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【JVM】深入JIT优化机制
  • AI安全新纪元:智能体驱动的网络安全新范式
  • 【JavaEE初阶】文件操作和IO
  • 【基础篇】数据结构
  • 无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案
  • 【Hot100】LeetCode—283. 移动零
  • [Spring] Spring AOP
  • 修复本地终端(windows)连接服务器使用zsh出现乱跳的问题
  • 有道云docx转换markdown,导入hugo发布到github page,多平台发布适配
  • 【Unity】案例 —— 胡闹厨房联机案例(持续更新)
  • css写一个按钮流光动画效果
  • Kubernetes-ingress
  • linux主机间免密登录
  • HBuidlerX 运行到Android App基座时提示没有检测到设备,该如何处理。
  • 002 | 常见的金融量化指标计算
  • [译] 怎样写一个基础的编译器
  • 【笔记】你不知道的JS读书笔记——Promise
  • Computed property XXX was assigned to but it has no setter
  • Docker入门(二) - Dockerfile
  • Mocha测试初探
  • Python socket服务器端、客户端传送信息
  • Vue 重置组件到初始状态
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 前端面试题总结
  • 如何进阶一名有竞争力的程序员?
  • 我建了一个叫Hello World的项目
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • ionic入门之数据绑定显示-1
  • 从如何停掉 Promise 链说起
  • 如何在招聘中考核.NET架构师
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # wps必须要登录激活才能使用吗?
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #if #elif #endif
  • ${factoryList }后面有空格不影响
  • ( 10 )MySQL中的外键
  • (2.2w字)前端单元测试之Jest详解篇
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (zt)最盛行的警世狂言(爆笑)
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (六)Flink 窗口计算
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (十三)Maven插件解析运行机制
  • (原创)可支持最大高度的NestedScrollView
  • ./configure,make,make install的作用(转)
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net core 6 集成和使用 mongodb
  • .NET CORE Aws S3 使用
  • .net core 外观者设计模式 实现,多种支付选择
  • .net2005怎么读string形的xml,不是xml文件。
  • .py文件应该怎样打开?