web安全(一)http协议

2.1http协议解析

       HTTP:超文本传输协议,是一种规范了浏览器与服务器之间互相通信的规则。

2.1.1发起http请求

       浏览器地址栏输入一个URL就发起了http请求。URL(统一资源定位符)即网页地址。
URL的标准如下:

协议://服务器IP[:端口]/路径/[?查询]

在某些方面而言,浏览器在http协议方面只不过多了HTML渲染的功能,让用户看到更直观的界面。

2.1.2HTTP协议详解

       HTTP是一种无状态的协议。无状态是指web浏览器与web服务器之间不需要建立持久的链接,这意味着当一个客户端向服务器端发出请求,然后web服务器返回响应(Response),连接就被关闭了。在服务器端不保留连接有关信息。HTTP请求只能由客户端发起,而服务器不能主动向客户端发送数据。
       HTTP遵循请求(Request)/应答(Response)模型。


image.png

通过实例来学习HTTP请求与响应

1.HTTP请求与响应。

(1)HTTP请求
       HTTP请求包括三部分,分别是请求行(请求方法),请求头(消息报头)和请求正文。

POST /login.php HTTP/1.1                                      //请求行
Host: www.xxser.com                                         //请求头
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 
                                                    //空白行,表示请求头结束
Username=admin&password=admin                   //请求正文

       请求行由三部分组成,第一部分说明是POST请求。第二部分/login.php 说明是该域名根目录下的login.php。第三部分使用的是HTTP1.1版本。
       第二行至空白行为HTTP中的请求头(消息头)。其中Host代表请求的主机地址,User-Agent代表浏览器的标识。

(2)HTTP响应
       HTTP响应也由三部分内容组成。分别是响应行,响应头(消息报头)和响应正文(消息主题)。

HTTP/1.1 200 OK                                           //响应行
Date: Sun, 28 Jan 2018 09:55:48 GMT         //响应头
Server: BWS/1.0
Content-Length: 97
Content-Type: text/html; charset=utf-8
Cache-Control: private
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Content-Encoding:gzip
Set-Cookie: _m7e_session=a797ede0c2a3193d03c77d875e462e3f; path=/; expires=Sun, 28 Jan 2018 15:55:48 -0000; HttpOnly
Connection: Keep-Alive
//空白行代表响应头结束
<html>                                              //响应主题又叫消息主题
<head><title>··················

       HTTP响应的第一行为响应行,其中有HTTP版本,状态吗(200)以及消息ok。
       第二行至末尾的空白为响应头,由服务器向客户端发送。
       消息报头之后是响应正文,是服务器端向客户端发送的HTML数据。

2.HTTP请求方法

       HTTP请求的方法非常多,以GEt,POST最常见。
(1)GET
       GET方法用户获取请求页面的指定信息(以实体的格式)。如果请求资源为动态脚本(非HTML),那么返回文本是web容器解析后的HTML源代码,而不是源文件。例如请求index.jsp,返回的不是index.jsp的源文件,而是解析后的html代码。

GET /index.php?id=1  HTTP/1.1
HOST: www.xxser.com

       使用GET请求index.php,并且id参数为1,在服务器端监本语言中可以选择性地接手这些参数,比如id=1&name=admin,一般都是由开发者内定好的参数项目才会接收,比如开发者只接收id参数项目,若加了其他参数项,如:

index.php?id=1&username=admin    //多个参数以“&”分隔

服务器端脚本不会理会你加入的内容,依然只会接收id参数,并且去查询数据,最终向服务器端发送解析过的HTML数据,不会因为你的干扰而乱套。
(2)POST
       post方法与GET类似,但最大的区别在于,GET方法没有请求内容,而POST是有请求内容的。POSt请求最多用于向服务器发送大量数据。GET有大小(长度)限制,并且GET请求会将发送的数据显示在浏览器端,但是POST是不会的。

3.HTTP状态码
HTTP/1.1   200  ok         //响应行

HTTP协议中状态码由三维数字组成,第一位数字定义了响应的类别,且只有以下五种。

  • 1xx:信息提示,表示成功已被成功接收,继续处理。范围100~101.
  • 2xx:成功,服务器成功地处理了请求。其范围为200~206.
  • 3xx:重定向,重定向状态码用于告诉客户端,它访问的资源已被移动,并告诉客户端新的资源地址位置。这时没浏览器将重新对新资源发起请求。其范围300~305.
  • 4xx:客户端错误状态码,又是客户端会发送一些服务器无法处理的东西。范围400~415.
  • 5xx:又是客户端发送一条有效请求,但web服务器自身出错了。5xx是用来描述服务器内部错误的,其范围为500~505。

常见的状态码描述如下。
200:客户端请求成功,是最常见的状态。
302:重定向。
404:请求资源不存在,是最常见的状态。
400:客户端请求语法错误,不能被服务器所理解。
401:请求未经授权。
403:服务器收到请求,但是拒绝提供服务。
500:服务器内部错误,是最常见的状态。
503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

4.HTTP消息

       HTTP消息又称为HTTP头,由四部分组成,分别是请求头,响应头,普通头和实体头。
(1)请求头
       请求头只出现在HTTP请求中,请求报头允许客户端向服务器端传递请求的附加信息和客户端自身的信息。
①Host
       Host请求报头域主要用于指定被请求资源的Interbet主机和端口号,例如:HOST:www.xxser.com:801
②User-Agent
       User-Agent请求报头域允许客户端将他的操作系统,浏览器和其他属性告诉服务器。
③Refere
       Referer包含一个URL,代表当前访问URL的上一个URL,也就是说用户是从什么地方来到当前页面。
④Cookies
       Cookies是非常重要的请求头,她是一段文本,常用来表示请求者身份等。
⑤Range
       Range可以请求实体的部分内容,多线程下载一定会用到此请求头。
⑥X-forweard-for
       X-forweard-for即XXF头,它代表请求端的IP,可以有多个,中间由逗号隔开。
⑦Accept
       Accept请求报头域用于指定客户端接手那些MIME类型的信息,如Accept:text/html,表明客户端希望接收HTML文本。
⑧Accept-Charset请求报头域用于指定客户端接收的字符集。例如:Accept-Charset:iso-8859-1,gb2312。如果在请求消息中设置这个域,默认是任何字符集都可以接收。

(2)响应头
       响应头是服务器根据请求向客户端发送的HTTP头。
①Server
       服务器所使用的Web服务器名称,如Server:Apache/1.3.6(Unix),攻击者通过查看此头,可以探测web服务器名称。所以,建议服务器端修改此头信息。
②Set-Cookie
       向客户端设置Cookie,通过查看此头,可以清楚看到服务器向客户端发送的Cooie信息。
③Last-Modified
       服务器通过这个头告诉浏览器,资料的最后修改时间。
④Location
       服务器通过这个头告诉浏览器去访问那个页面,浏览器接收到这个请求之后,通常会立刻访问localtion头所指向的页面。这个头通常配合302状态码使用。
⑤Refresh
       服务器通过Refresh头告诉浏览器定时刷新浏览器。

(3)普通头
       在普通报头中,有少数报头域用于所有请求和响应消息 ,但并不用于被传输的实体,只用于传输的消息。
例如:Date,表示消息产生的日期和时间。Connection,允许发送指定连接的选项。例如,指定连接是连续的,或者指定连接“close”选项,通知服务器,在响应完成后,关闭连接。Cache-Control,用于指定缓存指令,缓存指令是单向的,且是独立的。
注意:普通报头了解即可。

(4)实体头
       请求和响应消息都可以传送一个实体头。实体头定义了关于实体正文和请求所表示的资源的元信息。元信息也就是实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间等。常见的实体头如下。
①Content-Type
       Content-Type实体头用于向接收方指示实体的介质类型。
②Content-Encoding
       Content-Encoding头被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得中Content-Type报头域所引用的媒体类型,必须采用相应的解码机制。
③Content-Length
       Content-Length实体报头用于指明实体正文的长度,以字节方式储存的十进制数字来表示。
④Last-Modified
       Last-Modified实体报头用于指示资源的最后修改日期和时间。

2.1.4HTTP协议与HTTPS协议的区别

       HTTPS协议是以安全为目标的HTTP通道,其实就是HTTP的“升级”版本,只是它单纯的比HTTP协议更安全。

       HTTPS的安全基础是SSL,即在HTTP下加入SSL层。也就是HTTPS通过安全传输机制进行数据传输,这种机制可保护网络传送的所有数据的隐秘性与完整性,可以降低非侵入性拦截攻击的可能性。
HTTP协议与HTTPS协议的主要区别如下:

  • HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。
  • HTTP与HTTPS协议使用的是完全不同的连接方式,HTTP采用80端口连接,而HTTPS则是443端口。
  • HTTPS协议需要到ca申请证书,一般免费的证书很少,需要交费,也有些web容器提供,如TOMCAT。而HTTP协议却不需要。
  • HTTP连接相对简单,是无状态的,而HTTPS协议是由SSL+HTTP协议构建的课进行加密传输、身份认证的网络协议,相对来说,它要比HTTP协议更安全。
           
           
           
           本文大部分内容摘自web安全深度剖析,特为啄木鸟网络安全工作室新社员编写,适合小白快速学习使用。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,418评论 6 152
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,252评论 3 82
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年...
    _烩面_阅读 1,339评论 0 9
  • 在好基友家里住,他8点左右回来的。他在屋里打扫卫生,有一搭无一搭的聊着。然后他接了个电话,挂掉后要出去。我问:“谁...
    用屁股思考2017阅读 1,535评论 0 1