Web安全测试:HTTP请求详解

news2024/10/7 14:22:51

一、前言

结合内部资料,与安全渗透部门同事合力整理的安全测试相关资料教程,全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试,覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬!
全部文章请访问专栏:《全栈安全测试教程(0基础)》


通过本章节的学习,我们会掌握如下知识,为掌握Web安全测试做基础准备:

  1. HTTP1.0的请求方法
    了解HTTP1.0三种请求方法,GET, POST 和 HEAD
    掌握GET请求的标准格式
    掌握POST请求提交表单,上传文件的方法
    了解HEAD请求与GET请求的区别
  2. HTTP1.1新增的请求方法
    了解HTTP1.1新增的五种请求方法:OPTIONS,PUT,DELETE,TRACE,CONNECT方法的基本概念
    掌握HTTP1.1新增的五种请求的基本方法和产生的请求结果 。

文章目录

    • 一、前言
    • 二、HTTP请求
      • 1)GET请求
      • 2)POST请求
        • 2.1 表单格式
        • 2.2 混合格式
        • 2.3 文本格式
      • 3)HEAD请求
      • 4)OPTIONS请求
      • 5)PUT DELETE请求
      • 6)TRACE、CONNECT请求


二、HTTP请求

http请求由三部分组成,分别是:请求行、消息报头、请求正文。
请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:

  1. Method Request-URI HTTP-Version (CR)(LF)
  2. 其中 Method表示请求方法(GET,POST,HEAD等)
  3. Request-URI是一个统一资源标识符
  4. HTTP-Version表示请求的HTTP协议版本
  5. (CR)(LF)表示回车和换行(除了作为结尾的(CR)(LF)外,不允许出现单独的(CR)或(LF)字符)。

例:GET /get.php?arg1=value1 HTTP/1.1

HTTP消息请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

  1. 常用的报头:
  2. 常用的请求报头Accept,Accept-Charset,Accept-Encoding,Accept-Language,Authorization,Host(发送请求时,该报头域是必需的),User-Agent
  3. 每个类型请求头结束后,会跟上(CR)(LF)
  4. 消息报头和请求正文会隔一行

1)GET请求

GET请求格式:
<访问路径>[?=[&=…]]
例子:http://site1.com/get.php?arg1=value1
Server端可以根据参数名获取值:
PHP例子:

<?php echo $_GET['arg1']; ?>

结果就是输出arg1相应的值。

GET请求,是可以把数据放在URL中来传递,也可以不包含任何数据,HTTP请求只有请求头,没有请求数据。

请求头中可以不包含Content-Length,例子:
GET /get.php?arg1=value1 HTTP/1.1
Host: site1.com
Connection: close
User-Agent: Paw/2.2.5 (Macintosh; OS X/10.12.2) GCDHTTPRequest
GET请求可以只有请求的路径:
http://www.gooann.com
GET请求也可以带需要传递的数据,在访问路径之后带问号(?)+参数=值的方式发送。
http://site1.com/get.php?arg1=value1

2)POST请求

POST请求是包含数据,请求数据的格式,可以在HTTP头中定义。格式一般会有下面5种:

  1. 表单格式:application/x-www-form-urlencoded
  2. 混合格式:multipart/form-data
  3. JSON格式:application/json
  4. XML格式:text/xml
  5. 文本:text/plain

下面对这几种格式做一下介绍

2.1 表单格式

与get方式类似,是把所有提交数据放在数据区域。
POST方式也可以像GET方式在URL带参数,但一般不会这么去使用。
表单方式与GET方式类似,只是把数据放在头文件下面的请求正文区域。请求如下:
POST /post-form.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: 192.168.0.105
Connection: close
User-Agent: Paw/2.2.5 (Macintosh; OS X/10.12.2) GCDHTTPRequest
Content-Length: 11
arg1=value1


2.2 混合格式

有文件上传时常用的方法。可以接受同时提交不同类型的数据
表单中,可以把类型更改为file就可以上传文件

类型后面一般会跟boundary来告知数据区域分隔符
每个数据都可以单独说明数据类型

混合模式一般是用来传输文件。后面会跟boundary=__xxxx__来进行每个参数的分割。
POST /upload_file.php HTTP/1.1
Content-Type: multipart/form-data; boundary=------WebKitFormBoundaryRTP6hG23yFYrExfg
Host: 192.168.0.105
Connection: close
User-Agent: Paw/2.2.5 (Macintosh; OS X/10.12.2) GCDHTTPRequest
Content-Length: 101

------WebKitFormBoundaryRTP6hG23yFYrExfg
Content-Disposition: form-data; name=“arg1”

value1
------WebKitFormBoundaryRTP6hG23yFYrExfg
Content-Disposition: form-data; name=“file”; filename=“python.txt”
Content-Type: text/plain

多线程
xxxxx
------WebKitFormBoundaryRTP6hG23yFYrExfg
Content-Disposition: form-data; name=“file2”; filename=“mails.zip”
Content-Type: application/zip

xxxxx
------WebKitFormBoundaryRTP6hG23yFYrExfg–


2.3 文本格式

常见类型为json,xml,plain
这种类型的数据,需要服务端代码自行解析
PHP代码为例:
file_get_contents(“php://input”); - 可以获取数据区域文本
要是接受的是json,使用相关方法(函数)来解析
echo json_decode(file_get_contents(“php://input”),true)[‘arg1’];
可以根据type(类型)来解开数据。

文本模式,也可以按照文件来接收,
使用file_get_contents(“php://input”); 可以免去读取文件里的内容。
file_get_contents(“php://input”); 模式不能接收multipart/form-data模式。
下面代码就是PHP写的,当类型为json时,根据json解析

<?php if( $_SERVER['CONTENT_TYPE'] == 'application/json') { echo json_decode(file_get_contents("php://input"),true)['arg1']; } ?>

这时请求数据是:{“arg1”:“value1”}
返回值是:value1

3)HEAD请求

HEAD请求就是返回只有头部数据,数据部分不返回内容,返回的内容基本上与GET,POST的返回头一致:

在这里插入图片描述

4)OPTIONS请求

OPTIONS请求,默认情况下会返回允许的请求类型
http://www.microsoft.com/zh-cn/ 会返回:
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Credentials: true
一般需要跨域的时候需要设置OPTIONS(跨域后面来讲)
使用脚本让浏览器跨域进行请求的时候,会检测OPTIONS,对方服务器是否允许跨域。允许的情况下,才会真正去进行相应请求
当你用浏览器访问 site1.com, 某些脚本操作会提交到site2.com而且附带非浏览器默认的头信息,这个时候浏览器不会直接发出POST请求,先发出OPTIONS请求来判断是否允许发送POST。当对方回复允许了,才能发送POST请求。

5)PUT DELETE请求

PUT:在特定目录里上传指定文件,文件名在url中设置。
DELETE:删除特定目录里的文件,文件名在url中设置。
在NGINX中,可以添加如下配置来允许PUT,DELETE
location /upload/ {
dav_methods PUT DELETE;
root /usr/share/nginx/html;
}

PUT - 发送包
PUT /upload/Untitled HTTP/1.1
Content-Type: application/octet-stream
Host: 192.168.1.64
Connection: close
User-Agent: Paw/2.2.5 (Macintosh; OS X/10.12.6) GCDHTTPRequest
Content-Length: 284

PUT – 返回包
HTTP/1.1 201 Created
Server: nginx/1.12.1
Date: Fri, 01 Sep 2017 13:40:03 GMT
Content-Length: 0
Location: http://192.168.1.64/upload/Untitled
Connection: close


DETELE – 发送包
DELETE /upload/Untitled HTTP/1.1
Host: 192.168.1.64
Connection: close
User-Agent: Paw/2.2.5 (Macintosh; OS X/10.12.6) GCDHTTPRequest

DELETE – 返回包
HTTP/1.1 204 No Content
Server: nginx/1.12.1
Date: Fri, 01 Sep 2017 13:51:07 GMT
Connection: close


6)TRACE、CONNECT请求

HTTP TRACE是让我们的web服务器端将客户端的所有请求信息返回给客户端的方法,该方法多见于debug的需求。
CONNECT是在特定应用走HTTP协议时会用到:

  1. proxy可能会用到
  2. 某些使用http协议,需要长链接的程序(SSL就使用connect)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/912814.html

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

相关文章

基于AVR128单片机世界电子时钟的设计

一、系统方案 上电初始化完成系统初始化&#xff0c;液晶滚动显示北京、莫斯科、东京、伦敦、巴黎、纽约等六个城市的标准时间&#xff0c;显示的内容包括地区名及相应地区的年、月、日、星期、时、分、秒。 使用K1按键控制滚动显示或稳定显示某个地区的时间。 使用K3、K4、K5按…

Goodnotes替代品!有哪些类似Goodnotes的笔记软件?

近期软件圈的一个重磅消息&#xff0c;莫过于笔记软件Goodnotes6从买断制变更为订阅制&#xff0c;不少早前已购买了Goodnotes的用户感觉受到了欺骗&#xff0c;原先承诺的「一次付费、长期使用」变成了空头支票&#xff0c;想用上最新的6.0版本和AI功能&#xff0c;就得掏钱订…

微信开发之一键删除朋友圈评论的技术实现

简要描述&#xff1a; 删除某条朋友圈的某条评论 请求URL&#xff1a; http://域名地址/snsCommentDel 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数…

小程序开发简单介绍

1.主界面的 5 个组成部分 2.文件结构对比 3.目录结构 js逻辑文件 json配置 wxss样式 app全局文件 project.config.json项目配置 sitemap.json索引配置文件 3.1 全局配置 app.json 概念 是当前⼩程序的全局配置&#xff0c;包括了⼩程序的所有⻚⾯路径、界⾯表现、⽹络超时时…

SpringBoot+WebSocket搭建多人在线聊天环境

一、WebSocket是什么&#xff1f; WebSocket是在单个TCP连接上进行全双工通信的协议&#xff0c;可以在服务器和客户端之间建立双向通信通道。 WebSocket 首先与服务器建立常规 HTTP 连接&#xff0c;然后通过发送Upgrade标头将其升级为双向 WebSocket 连接。 WebSocket使得…

MyBatis plus 多数据源实现

1. 项目背景 最近写文章发布到【笑小枫】小程序和我的个人网站上&#xff0c;因为个人网站用的是halo框架搭建&#xff0c;两边数据结构不一致&#xff0c;导致我每次维护文章都需要两边维护&#xff0c;这就很烦~ 于是&#xff0c;本文就诞生了。通过项目连接这两个数据库&a…

CQ课堂 | 社区版 2.3.0 新功能操作演示直播快来预约!

CloudQuery 一体化数据库操作管控云平台&#xff0c;社区版 V 2.3.0 已发布&#xff01; 三大核心功能增强 1、 权限管控&#xff1a;新增自动授权、分级授权 2、 动态脱敏&#xff1a;新增脱敏配置导入导出、脱敏扫描 3、 审计中心&#xff1a;新增上卷下钻能力、审计归档 …

【3D激光SLAM】LOAM源代码解析--transformMaintenance.cpp

系列文章目录 【3D激光SLAM】LOAM源代码解析–scanRegistration.cpp 【3D激光SLAM】LOAM源代码解析–laserOdometry.cpp 【3D激光SLAM】LOAM源代码解析–laserMapping.cpp 【3D激光SLAM】LOAM源代码解析–transformMaintenance.cpp 写在前面 本系列文章将对LOAM源代码进行讲解…

微积分入门(3)—— 近似值与微分的定义

例零 微分 言归正传&#xff0c;我们今天先来谈谈近似值 此“近似值”非彼“近似值”&#xff0c;大部分人现在想到的绝对是“四舍五入”。 所以我们今天偏偏就不讲四舍五入&#xff0c;为什么呢&#xff1f; 还记得我们上次说的极小变化量吗&#xff1f;在任意小的变化中&…

AWVS安装~Windows~激活

目录 1.下载安装包 2.双击acunetix_15.1.221109177.exe进行安装 3.配置C:\Windows\System32\drivers\etc\hosts 4.复制wvsc.exe到C:\Program Files (x86)\Acunetix\15.1.221109177下 5.复制license_info.json与wa_data.dat到C:\ProgramData\Acunetix\shared\license下&…

Python爬虫库之urllib使用详解

一、Python urllib库 Python urllib 库用于操作网页 URL&#xff0c;并对网页的内容进行抓取处理。 Python3 的 urllib。 urllib 包 包含以下几个模块&#xff1a; urllib.request - 打开和读取 URL。 urllib.error - 包含 urllib.request 抛出的异常。 urllib.parse - 解…

【云原生微服务九】SpringCloud之Feign实现声明式客户端负载均衡详细案例

文章目录 一、Feign概述1、为什么会使用Feign代替Ribbon2、Feign和OpenFeign的区别&#xff1f; 二、Feign实现负载均衡0、最上层父项目spring-cloud-center的pom.xml文件1、搭建服务注册中心eureka-server1、pom.xml2、修改配置文件application.yml3、修改启动类4、启动eureka…

Java将PDF文件转为Word文档

Java将PDF文件转为Word文档 一、创建Springboot Maven项目 二、导入依赖信息 <repositories><repository><id>com.e-iceblue</id><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository></repositories&g…

错误代码0x80004005要怎么解决?快速修复的方法分享

错误代码0x80004005是Windows操作系统中常见的错误之一&#xff0c;它经常出现在执行某些操作时或在使用特定的应用程序时。这个错误代码可能有多种原因导致&#xff0c;如文件损坏、访问权限问题、网络连接故障等。本文将介绍几种常见的修复方法来解决错误代码0x80004005&…

arcgis:画一幅自己城市的shp地图

首先打开ArcGis10.6&#xff0c;点击带黄底的小加号&#xff0c;添加底图。 可以选择中国地图彩色版&#xff0c;然后双击&#xff0c;转动鼠标滑轮找到属于自己的城市。 点击-目录&#xff0c;在新建的文件夹里右击-新建-shapefile。 格式选择折线&#xff0c;先把主要河流道路…

Airtest框架(跨平台自动化测试框架)

目录 Airtest与Poco airtest IDE界面 poco窗口 airtest窗口 airtest常用方法 连接设备 安卓命令等操作 安卓按键操作 设备状态获取 录屏 windows设备常用操作 生成airtest报告 Airtest与Poco Airtest是基于Python的跨平台UI自动化测试框架&#xff0c;基于图像识…

14款奔驰R400升级ACC自适应巡航系统,解放双脚缓解驾驶疲劳

有的时候你是否厌倦了不停的刹车、加油&#xff1f;是不是讨厌急刹车&#xff0c;为掌握不好车距而烦恼&#xff1f;如果是这样&#xff0c;那么就升级奔驰原厂ACC自适应式巡航控制系统&#xff0c;带排队自动辅助和行车距离警报功能&#xff0c;感受现代科技带给你的舒适安全和…

【leetcode 力扣刷题】反转链表+递归求解

反转链表递归求解 206. 反转链表解法①&#xff1a;取下一个节点在当前头节点前插入解法②&#xff1a;反转每个节点next的指向解法③&#xff1a;递归 92.反转链表Ⅱ反转left到right间节点的next指向 234.回文链表解法①&#xff1a;将链表元素存在数组中&#xff0c;在数组上…

python接口自动化之如何使用requests库发送http请求

前言 今天笔者想和大家来聊聊python接口自动化如何使用requests库发送http请求&#xff0c;废话呢笔者就不多说了&#xff0c;直接进入正题。 一、requests库 什么是Requests &#xff1f;Requests 是⽤Python语⾔编写&#xff0c;基于urllib&#xff0c;采⽤Apache2 Licens…

大数据 算法

什么是大数据 大数据是指数据量巨大、类型繁多、处理速度快的数据集合。这些数据集合通常包括结构化数据&#xff08;如数据库中的表格数据&#xff09;、半结构化数据&#xff08;如XML文件&#xff09;和非结构化数据&#xff08;如文本、音频和视频文件&#xff09;。大数据…