一个人的闲言碎语

dr0v

blog.drov.com.cn
一个人碎碎念。
About Me
A lazy security employee.

2018年9月19日星期三

工作原因,最近开始阅读<web安全深度剖析>,做一些学习笔记上传上来。

HTTP协议解析

HTTP协议当前最新版本为1.1,HTTP协议是一种无状态协议,即端与服务器无需建立持久连接(HTTP、UDP、FTP等都是无状态协议,TCP为有状态协议,传送门);即客户端发出请求(Request),服务器端返回响应(Response)后,连接即被关闭,服务器端不保留连接相关信息,因此,web应用引入了cookie进行session追踪。
HTTP遵循请求(Request)/应答(Response)模型;其中请求包括三个部分:请求行、请求头和请求正文:
//请求行
POST /gdt_stats.fcg HTTP/1.1.   
//请求头
Content-Language: zh-cn
Cookie: snsuid=64845554712576
Content-type: text/xml; charset=UTF-8
User-Agent: GDTADNetClient-[Dalvik/2.1.0 (Linux; U; Android 6.0.1; vivo Xplay6 Build/MXB48T)]
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 230

//请求正文
count=1&viewid0=2uNr5yDDwJGGmmrSz4ruYXH9gEnes_aA4_H70u!On5L4mo2mGbVmVEdS0gLUsz2MdWIT_13Mu!HF_OKSHIIM7MOnbvX_kZCtDNIMzEU7nK0D7YW0uw5Btu_Eg9GeZxpHwM2m9wN_S_Eb1!!dA4LpQTGJwgNPKTRFjX!RZEjBmBNDMJ3ZWTpSSmzZKiqUH1N1aPF7Wp1_jpwUSfgbyO4wRA
HTTP请求第一行即为请求行,由三部分组成(依次):请求类型(GET/POST等)、请求路径(域名跟目录下某文件或文件夹)、协议及版本(一般为HTTP 1.1)
第二行至空白行为HTTP的请求头(消息头),包括若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息,以本文例举报文为例进行说明(详细说明可转向:传送门):
  • Content-Language:客户端语言设置
  • Cookie:网站在终端的标识数据,用于辨别客户端用户身份、跟踪session
  • Content-type:请求正文格式
  • User-Agent:浏览器标识
  • Accept:客户端可接受的数据类型
  • Connection:连接方式(持久连接/即时释放)
  • Content-Length:请求正文长度
空行后即为请求正文(GET请求无正文),一般是页面表单中的组件值,以param1=value1&param2=value2的键值对形式编码成一个格式化串存在。
HTTP响应报文也是三部分组成:响应行、响应头和响应正文:
//响应行
HTTP/1.1 204 No Content
//响应头
Date: Tue, 04 Jul 2017 00:55:13 GMT
Content-Type: text/html
Content-Length: 0
Connection: keep-alive
Server: QZHTTP-2.37.1
Cache-Control: private, no-cache, must-revalidate, max-age=0

//响应正文 可无
第一行为响应行,三部分组成(依次为):协议及版本(一般为HTTP 1.1)、状态码(204/200,最让人熟知的就是404)以及消息(No Content/OK)。
第二行至空白行为响应头,一版包含了响应时间、响应正文数据类型、响应正文长度、Web服务器等。
空行之后即响应正文,是服务器根据请求做的响应数据,有的是html数据(网页请求),也有的是一个文件数据如APK文件(下载请求)。

请求类型

HTTP请求类型/方法有八种,用于表明对Request-URI指定的资源的不同操作方式(最常见的即为GET&POST),具体介绍如下:
  1. GET:向特定的资源发出请求,请求行中可以带参数数据(由开发者制定好,非指定内容不会处理——否则即为漏洞)
  2. POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。
  3. OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*’的请求来测试服务器的功能性。
  4. HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。常用于测试超文本链接的有效性、可访问性和近期变更,扫描工具常用于测试资源是否存在。
  5. PUT:向指定资源位置上传其最新内容(若资源不存在,则创建新资源)。
  6. DELETE:请求服务器删除Request-URI所标识的资源。
  7. TRACE:回显服务器收到的请求,主要用于测试或诊断。
  8. CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

状态码

HTTP响应报文中,响应行第二位即为状态码,用于标识响应的状态,状态码由三位数字组成,第一位数字定义响应的类别,仅5种:
  • 1xx:信息提示,表示请求已被成功接收,继续处理。范围: 100~101
  • 2xx:成功,服务器已成功处理请求。范围: 200~206
  • 3xx:重定向,告诉客户端其请求的资源已转移,并告知新地址,客户端依此重新访问资源新地址。范围: 300~305
  • 4xx:客户端错误状态码,请求服务器无法处理,如格式错误或URL不存在。范围: 400~415
  • 5xx:用于描述服务器内部错误,如网站挂了。范围: 500~505
常见的具体状态码有:
  • 200:客户端请求成功
  • 302:重定向
  • 404:请求资源不存在
  • 400:请求语法错误
  • 401:请求未经授权
  • 403:服务器拒绝提供服务
  • 500:服务器内部错误
  • 503:当前无法处理请求,一段时间后可能恢复

HTTP与HTTPS区别

HTTPS即在HTTP下加入SSL层以保障传输数据的保密性和安全性,主要区别有:
  • HTTP为明文传输,HTTPS为SSL加密传输
  • HTTP使用80端口,HTTPS使用443端口
  • HTTPS需要在CA申请证书,HTTP无需
  • HTTP连接简单、无状态,HTTP加上了SSL协议可进行加密传输和身份认证

0 评论:

发表评论