HTTP协议分析及攻防方法

HTTP协议简介

应用层协议,无状态协议(可设定为维持TCP连接,但服务器端的资源会释放)。默认HTTP的端口号为80,HTTPS的端口号为443。

基于HTTP协议的客户机访问包括4个过程,分别是建立TCP套接字连接、发送HTTP请求报文、接收HTTP应答报文和关闭TCP套接字连接。

请求报文格式:请求行、请求头部和请求数据。

应答报文格式:状态行、响应报头、响应正文

HTTP请求方法

HTTP/1.1协议中共定义了八种方法来表明Request-URI指定的资源的不同操作方式,方法名称是区分大小写的:

HEAD 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。 

GET 向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在web app.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。 

GET请求报文示例:

GET http://www.baidu.com:80/ HTTP/1.1

Accept: */*

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;

Windows NT 5.1; SV1; .NET CLR 2.0.50727)

Host: www.baidu.com

Connection: Keep-Alive

GET应答报文示例:

HTTP/1.1 200 OK                                                              /* 状态行 */

Via: 1.1 CVICSE-ST5YDEOY                                           /* 状态头信息 */

Connection: Keep-Alive

Proxy-Connection: Keep-Alive

Content-length: 9803

Expires: Fri, 02 Nov 2012 03:05:31 GMT

后边是页面内容等

POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 

POST请求报文示例:

POST /sp.cgi HTTP/1.0

Host: www.spserver.com

Content-Length: <Content-Length>

<CommandId>=<4>

<SequenceNumber>=<205502327125025327>

<UserNumber>=<8613001125453>

<SPNumber>=<168>

<MessageContent>=<ABCD 1234>

POST应答报文示例:

HTTP/1.0 200 OK                                                /* 状态行 */

Date: Tue, 13 Mar 2001 02:45:12 GMT                   /* 状态头信息 */

Server: Apache/1.3.12 (Unix)

Content-Type: text/html

Connection: close

后边是POST实体信息                                                 /* 一般为POST实际传输的信息*/

OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送‘*‘的请求来测试服务器的功能性。 

PUT 向指定资源位置上传其最新内容。 

DELETE 请求服务器删除Request-URI所标识的资源。 

TRACE 回显服务器收到的请求,主要用于测试或诊断。 

CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 

HTTP协议字段

Requests独有部分:


Header


解释


示例


Accept


指定客户端能够接收的内容类型


Accept: text/plain, text/html


Accept-Charset


浏览器可以接受的字符编码集


Accept-Charset: iso-8859-5


Accept-Encoding


指定浏览器可以支持的web服务器返回内容压缩编码类型


Accept-Encoding: compress, gzip


Accept-Language


浏览器可接受的语言


Accept-Language: en,zh


Accept-Ranges


可以请求网页实体的一个或者多个子范围字段


Accept-Ranges: bytes


Authorization


HTTP授权的授权证书,当使用密码机制时用来标识浏览器


Authorization:Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==


Cookie


Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能


JSESSIONID=DFB91E6D3B78AFD0270FDA90DA7062E1.isp5; CASSERVERPATH=http://192.168.2.19:8580


Content-Length


请求的内容长度


Content-Length: 348


Content-Type


请求的与实体对应的MIME信息


Content-Type: application/x-www-form-urlencoded


Expect


客户预期的响应状态


Expect: 100-continue


From


发出请求的用户的Email


From: [email protected]


Host


指定请求的服务器的域名和端口号


Host: www.zcmhi.com


If-Match


只有请求内容与实体相匹配才有效,供PUT方法使用


If-Match: “737060cd8c284d8af7ad3082f209582d”


If-Modified-Since


如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码


If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT


If-None-Match


如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变


If-None-Match: “737060cd8c284d8af7ad3082f209582d”


If-Range


如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag


If-Range: “737060cd8c284d8af7ad3082f209582d”


If-Unmodified-Since


只在实体在指定时间之后未被修改才请求成功


If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT


Max-Forwards


限制信息通过代理和网关传送的时间


Max-Forwards: 10


Proxy-Authorization


连接到代理的授权证书


Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==


Range


只请求实体的一部分,指定范围


Range: bytes=500-999


Referer


先前网页的地址,当前请求网页紧随其后,即来路


Referer: http://www.zcmhi.com/archives/71.html


TE


客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息


TE: trailers,deflate;q=0.5


User-Agent


User-Agent的内容包含发出请求的用户信息


User-Agent: Mozilla/5.0 (Linux; X11)

Responses 独有部分 


Header


解释


示例


Accept-Ranges


表明服务器是否支持指定范围请求及哪种类型的分段请求


Accept-Ranges: bytes


Age


从原始服务器到代理缓存形成的估算时间(以秒计,非负)


Age: 12


Allow


对某网络资源的有效的请求行为,不允许则返回405


Allow: GET, HEAD


Content-Encoding


web服务器支持的返回内容压缩编码类型。


Content-Encoding: gzip


Content-Language


响应体的语言


Content-Language: en,zh


Content-Length


响应体的长度


Content-Length: 348


Content-Location


请求资源可替代的备用的另一地址


Content-Location: /index.htm


Content-MD5


返回资源的MD5校验值


Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==


Content-Range


在整个返回体中本部分的字节位置


Content-Range: bytes 21010-47021/47022


Content-Type


返回内容的MIME类型


Content-Type: text/html; charset=utf-8


ETag


请求变量的实体标签的当前值


ETag: “737060cd8c284d8af7ad3082f209582d”


Expires


响应过期的日期和时间


Expires: Thu, 01 Dec 2010 16:00:00 GMT


Last-Modified


请求资源的最后修改时间


Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT


Location


用来重定向接收方到非请求URL的位置来完成请求或标识新的资源


Location: http://www.zcmhi.com/archives/94.html


Proxy-Authenticate


它指出认证方案和可应用到代理的该URL上的参数


Proxy-Authenticate: Basic


refresh


应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)


Refresh: 5; url=

http://www.zcmhi.com/archives/94.html


Retry-After


如果实体暂时不可取,通知客户端在指定时间之后再次尝试


Retry-After: 120


Server


web服务器软件名称


Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)


Set-Cookie


设置Http Cookie


Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1


Vary


告诉下游代理是使用缓存响应还是从原始服务器请求


Vary: *


WWW-Authenticate


表明客户端请求实体应该使用的授权方案


WWW-Authenticate: Basic

 

Requests/ Responses共有部分


Header


解释


示例


Cache-Control


指定请求和响应遵循的缓存机制


Cache-Control: no-cache


Connection


表示是否需要持久连接。(HTTP 1.1默认进行持久连接)


Connection: close


Date


浏览器或者服务器消息发出的时间


Date: Tue, 15 Nov 2010 08:12:31 GMT


Pragma


包括实现特定的指令,它可应用到响应链上的任何接收方


Pragma: no-cache


Trailer


指出头域在分块传输编码的尾部存在


Trailer: Max-Forwards


Transfer-Encoding


文件传输编码


Transfer-Encoding:chunked


Upgrade


向服务器指定某种传输协议以便服务器进行转换(如果支持)


Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11


Via


通知中间网关或代理服务器地址,通信协议


Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)


Warning


警告实体可能存在的问题


Warning: 199 Miscellaneous warning

       

HTTP返回状态码

1xx:请求收到,继续处理

2xx:操作成功收到,分析、接受

3xx:完成此请求必须进一步处理

4xx:请求包含一个错误语法或不能完成

5xx:服务器执行一个完全有效请求失败

100——客户必须继续发出请求

101——客户要求服务器根据请求转换HTTP协议版本

200——交易成功

201——提示知道新文件的URL

202——接受和处理、但处理未完成

203——返回信息不确定或不完整

204——请求收到,但返回信息为空

205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件

206——服务器已经完成了部分用户的GET请求

300——请求的资源可在多处得到

301——删除请求数据

302——在其他地址发现了请求数据

303——建议客户访问其他URL或访问方式

304——客户端已经执行了GET,但文件未变化

305——请求的资源必须从服务器指定的地址得到

306——前一版本HTTP中使用的代码,现行版本中不再使用

307——申明请求的资源临时性删除

400——错误请求,如语法错误

401——请求授权失败

402——保留有效ChargeTo头响应

403——请求不允许

404——没有发现文件、查询或URl

405——用户在Request-Line字段定义的方法不允许

406——根据用户发送的Accept拖,请求资源不可访问

407——类似401,用户必须首先在代理服务器上得到授权

408——客户端没有在用户指定的饿时间内完成请求

409——对当前资源状态,请求不能完成

410——服务器上不再有此资源且无进一步的参考地址

411——服务器拒绝用户定义的Content-Length属性请求

412——一个或多个请求头字段在当前请求中错误

413——请求的资源大于服务器允许的大小

414——请求的资源URL长于服务器允许的长度

415——请求资源不支持请求项目格式

416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求

也不包含If-Range请求头字段

417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下

一级服务器不能满足请求

500——服务器产生内部错误

501——服务器不支持请求的函数

502——服务器暂时不可用,有时是为了防止发生系统过载

503——服务器过载或暂停维修

504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长

505——服务器不支持或拒绝支请求头中指定的HTTP版本

常见攻击和防御手段,未整理完的

  1. SQL注入
  2. 跨站脚本攻击(XSS)
  3. 跨站请求伪造攻击(CSRF)
  4. Http Heads攻击
  5. DOS/DDOS

HTTP是基于传输层TCP协议的,而TCP是一个端到端的面向连接的协议

  1. 会话劫持
  2. HTTP身份验证
  3. 每个字段都可被用来攻击,可以对字段进行分安全级别,由用户来选择安全级别,高安全级别检验更多字段。字段内容,字段长度

可以把http的攻击按照不同阶段进行罗列

时间: 2024-08-07 00:13:53

HTTP协议分析及攻防方法的相关文章

【协议分析】HTTP2技术变革的冲击和影响分析

HTTP2技术变革的冲击和影响分析 HTTP2于今年2月28日正式通过IETF组织批准发布,正式定稿,那么什么是HTTP2,HTTP2将给我们带来哪些改变,将对我们的业务和产品产生哪些影响,应用安全研究部的协议分析研究员对此进行了深入的分析. HTTP协议发展及特点 HTTP是往返"浏览器"与"WEB Server"的协议(即:HTTP Protocol). HTTP 0.9 只有基本的文本 GET 功能,具有典型的无状态性,每个事务独立进行处理.事务结束时就释放这

物联网MQTT协议分析和开源Mosquitto部署验证

在<物联网核心协议—消息推送技术演进>一文中已向读者介绍了多种消息推送技术的情况,包括HTTP单向通信.Ajax轮询.Websocket.MQTT.CoAP等,其中MQTT协议为IBM制定并力推,其具有开放.简单.轻量级以及易于实现的特点使得其即便在资源受限的环境中也能得到很好的使用,比如运行在资源紧缺型的嵌入式系统中或网络带宽非常昂贵的环境中,除此之外,它也被广泛用于遥感勘测.智能家居.能源监测和医疗应用程序等各个领域,是物联网的重要组成部分,将来可能会成为物联网的事实标准. 本篇文章将帮助

协议分析 - DHCP协议解码详解

协议分析 - DHCP协议解码详解 [DHCP协议简介] DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 BOOTP,它工作在OSI的应用层,是一种帮助计算机从指定的DHCP服务器获取它们的配置信息的自举协议. DHCP使用客户端/服务器模式,请求配置信息的计算机叫做DHCP客户端,而提供信息的叫做DHCP的服务器.DHCP为客户端分配地址的方法有三种:手工配置.自动配置.动态配置. DHCP最重要的功能就是动态分配

http-live-streaming 协议分析

http-live-streaming 协议分析:不受限制的多媒体数据流的传输.协议支持媒体数据加密与流切换(例如不同码率).媒体数据创建后立即传输,播放接近实时.媒体数据通常采用HTTP进行传输.播放列表由一个有序的媒体URI列表和信息标签组成,每个媒体URI指向一个媒体文件,这个媒体文件是单个连续媒体流上的一个片断.为了播放媒体流,客户端首先获取播放列表文件,然后获取并播放播放列表中的每个媒体流文件.客户端依据下文定义方式重复加载播放列表文件以获取追加片断.播放列表必须是扩展的M3U播放列表

NetAnalyzer笔记 之 二. 简单的协议分析

[创建时间:2015-08-27 22:15:17] NetAnalyzer下载地址 上篇我们回顾完了NetAnalyzer一些可有可无的历史,在本篇,我决定先不对NetAnalyzer做介绍,而是先要了解一些关于构建NetAnalyzer的基础知识,如系统中可以分析的一些网络协议,了解它们的分布方式,字段含义等.在了解了协议的基础上,开始对Winpcap进行一些介绍,在这过程中,学习配置Winpcap的开发环境,做一些简单的数据采集程序.第三部分着重介绍过滤表达式的一些基本语法结构.写下来则要

SMTP协议分析

SMTP协议分析 第1章.     SMTP概述 1.1.  SMTP在邮件通信中的位置 SMTP,即简单邮件传送协议,所相应RFC文档为RFC821.同http等多数应用层协议一样,它工作在C/S模式下,用来实现因特网上的邮件传送.SMTP在整个电子邮件通信中所处的位置如图 1所看到的. 图 1电子邮件的通信过程 能够看出,SMTP是用来将客户机上的邮件传送到server上.这里的客户机是指某次连接中的发送方,server是指对应的接收方.在解说发送邮件的整个通信过程前,先解释一以下几个术语.

协议分析TMP

最近闲来有事, 分析了一个非常低端(非常低端的意思是说你不应该对她是否能取代你现有的QQ客户端作任何可能的奢望,她只是一个实验性的东西)的手机QQ的协议, 是手机QQ3.0,      所用到的TCP/HTTP通信协议版本是1.4, 也不知道是哪一年release的了, 至少有七八年的历久了吧, 反正就是: 功能非常弱! 主要的分析原因是想学学网络方面的编程经验(这是我第2次弄socket编程 :-) ), 以及学学怎么抓包分析. 主要用到的工具软件 手机QQ3.0: http://www.ru

OmniPeek 基础之协议分析

Ominpeek一款网络抓包工具,或者说网络协议分析工具.不是管是前端开发.后端开发或都测试人员.为了解数据是否正常的传递,经常会用到网络数据包拦截软件来进行分析. Ominpeek 与我们常用的HttpWatch.Fildder 略有不同.HttpWatch 是基于浏览器的插件,拦截HTTP的数据包,而Ominpeek是基于网卡底层扫描的.计算机与外界的交流必经过网卡,也就是说它能拿检测到一切经过网络的数据. Ominpeek 是由Wildpackets 公司研发的网络扫描维护工具,其提供了高

[转载] TLS协议分析 与 现代加密通信协议设计

https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/?from=timeline&isappinstalled=0 最近发现密码学很有意思,刚好还和工作有点关系,就研究了一下,本文是其中一部分笔记和一些思考. 密码学理论艰深,概念繁多,本人知识水平有限,错误难免,如果您发现错误,请务必指出,非常感谢! 本文禁止转载 本文目标: 学习鉴赏TLS协议的设计,透彻理解原理和重