Web安全测试:HTTP请求详解

这篇具有很好参考价值的文章主要介绍了Web安全测试:HTTP请求详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

结合内部资料,与安全渗透部门同事合力整理的安全测试相关资料教程,全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试,覆盖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请求

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的返回头一致:

Web安全测试:HTTP请求详解,全栈安全测试(0基础),web安全,http,安全

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协议时会用到:文章来源地址https://www.toymoban.com/news/detail-664848.html

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

到了这里,关于Web安全测试:HTTP请求详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web:前端常用的几种Http请求GET和POST样例

    1、简述 在Web开发过程中,少不了发起Http请求服务端的接口数据,在不同的框架中使用了不同的Http请求方式,常用的请求有fetch、 ajax、 axios、XMLHttpRequest、request,以下样例仅供参考。 2、Fetch Fetch API 是一种 JavaScript API,是一种基于 Promise 的现代API,用于在网络中发送和接收

    2024年02月07日
    浏览(30)
  • web基础与HTTP

    (1)网络上交互是基于TCP/ip协议,每个主机都有唯一的位置标识(ip)地址、物理地址为mac地址 (2)为了地址的唯一性,用户协议向特地的机构申请注册,分配IP地址网络中有两种: IP地址系统、域名地址系统 因为32位的二进制数不便于记忆,因此有了域名代替。 DNS解析方

    2024年02月09日
    浏览(21)
  • linux高并发web服务器开发(web服务器)18_函数解析http请求, 正则表达式,sscanf使用,http中数据特殊字符编码解码

    pdf详情版 编写函数解析http请求 ○ GET /hello.html HTTP/1.1rn ○ 将上述字符串分为三部分解析出来 编写函数根据文件后缀,返回对应的文件类型 sscanf - 读取格式化的字符串中的数据 ○ 使用正则表达式拆分 ○ [^ ]的用法 通过浏览器请求目录数据 ○ 读指定目录内容  opendir 

    2024年02月16日
    浏览(42)
  • Web基础①HTTP协议

    HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。 1.HTTP协议版本 (1)HTTP/0.9:已过时。只接受 GET 一种请求方法,没有在通讯中指定版本号,且不支持请求头

    2024年02月21日
    浏览(26)
  • 【web基础与HTTP协议】

    1.1、域名的概述 1、域名的概念: IP地址不易记忆 2、早期使用Hosts文件解析域名: ·主机名称重复 ·主机维护困难 3、DNS(Domain Name System 域名系统): ·分布式 ·层次性 1.2、域名空间结构 ·根域 ·顶级域 — 组织域 — 国家/地区域名 ·二级域 ·FQDN=主机名.DNS后缀 DNS 解析过程 客户端

    2024年02月07日
    浏览(29)
  • web基础与HTTP协议

    1.1 DNS作用 正向解析 根据域名查找对应的IP地址; 反向解析 根据IP地址查找对应的域名 1.2 域名空间结构 ① 根域 位于域名空间最顶层,一般用一个 “.” 表示 基础单位,除了根域 其他都只有一个上级域,有0或多个子域,同层域不可重复的子域或域名 ② 顶级域 一般代表一

    2024年02月06日
    浏览(25)
  • .NET Core(C#)使用Titanium.Web.Proxy实现Http(s)代理服务器监控HTTP请求

    关于Titanium.Web.Proxy详细信息可以去这里仔细看看,这里只记录简单用法 NuGet直接获取Titanium.Web.Proxy 配置 与其说是配置,不如就说这一部分就是未来你需要使用的部分,想知道具体每个部分是干什么的就去看原文链接 全放过来太占地方 最后的 Console.Read(); 是一个等待函数,你

    2024年02月09日
    浏览(45)
  • web基础http与apache

       HTTP 是一种用作获取诸如 HTML 文档这类资源的协议。它是 Web 上进行任何数据交换的基础,同时,也是一种客户端—服务器(client-server)协议       为解决\\\"用什么样的网络协议来实现整个因特网上的万维网文档”这一难题,就要使万维网客户程序(以浏览器为主,但不限

    2024年02月11日
    浏览(26)
  • web基础及http协议 (一)

    互联网:是网络的网络,是所有类型网络的母集 因特网:世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上,大家把连接在因特网上的计算机都成为主机。 万维网:WWW (world wide web)万维网并非某种特殊的计算机网络, 是一个大规模的、联机式的信息贮藏

    2024年02月21日
    浏览(24)
  • HTTP——七、确保Web安全的HTTPS

    HTTP——一、了解Web及网络基础 HTTP——二、简单的HTTP协议 HTTP——三、HTTP报文内的HTTP信息 HTTP——四、返回结果的HTTP状态码 HTTP——五、与HTTP协作的Web服务器 HTTP——六、HTTP首部 HTTP——七、确保Web安全的HTTPS HTTP——八、确认访问用户身份的认证 HTTP——九、基于HTTP的功能

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包