HTTP图解阅读笔记

✧( •̀ ω •́ )( •̀ ω •́ )( •̀ ω •́ )( •̀ ω •́ )( •̀ ω •́ )( •̀ ω •́ )( •̀ ω •́ )( •̀ ω •́ )( •̀ ω •́ )( •̀ ω •́ )( •̀ ω •́ )( •̀ ω •́ )( •̀ ω •́ )✧

第一章 了解WEB及网络基础

网络基础 TCP/IP

1. TCP/IP 基本概念

协议: 计算机与网络设备相互通信,需要遵守同一规则,即为协议

TCP/IP: 一般是指一个以TCP、IP为代表的协议簇

TCP/IP 的重要特点: 分层管理

TCP/IP协议族按层次分为

1.应用层

作用:定义数据格式并按照对应的格式解读数据

一般包括 :HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)、SSH(安全远程登陆)、DNS(域名解析)以及许多其他协议

2.传输层

作用:保证数据传输的可靠性(TCP协议),给每个应用程序标识身份(UDP协议),实现端口到端口的通信。

一般包括: TCP与UDP协议

3.网络层

作用:定义网络地址、区分网段、子网内MAC寻址、对于不同子网的数据包进行路由。

一般包括:ICMP、IP、IGMP、ARP

4.链路层

作用:数据包从一个设备的网络层传输到另外一个设备的网络层的方法,或是一个~~~~虚拟专有网络~~~~(~~~~VPN~~~~)或者隧道(?——?)

一般包括:控制操作系统和操作系统硬件的设备驱动、NIC(网卡)、光纤等物理可见部分

TCP/IP 通信传输流

书图:

Image

上图表示TCP/IP协议数据的封装和分用,简略地来说:发送端每通过一层会增加该层的首部,接收端每通过一层则删除该层的首部。

IP、TCP和DNS

IP

IP协议位于网络层,作用是根据源主机和目的主机的地址来传送数据。其中两个重要条件是:

1.IP地址:节点(计算机或交换机)被分配的地址 (可变换)

2.MAC地址: 与网卡绑定的地址。

ps:ARP协议可以通过IP地址反查出MAC地址

TCP

TCP协议位于传输层,提供可靠的字节流服务(指:将大块的数据分割成以报文段为单位的数据包进行管理)

TCP的三次握手策略

作用:准确无误的将数据送至目标处。

Image

第一次握手:发送端发送一个带SYN标志的数据包给接受端

第二次握手:接收端接受到后,回传一个带有SYN/ACK的数据包表示确认

第三次握手:发送端再回传一个带ACK标志的数据包,表示握手结束。

PS :若在某个阶段莫名中断,TCP会再次以相同的顺序发相同的数据包。

DNS

DNS协议是位于应用层,提供域名到IP地址之间的解析服务(双向)。

相较于IP地址,域名易于被人类接受,用域名作为IP地址的助记符。

5.URI与URL

URL(统一资源定位符)

URL 为 Uniform Resource Locater 的缩写,是使用 Web浏览器等访问Web页面是输入的网页地址。

URI(统一资源标识符)

URI 为 Uniform Resource Identifier 的缩写,是由某个协议方案表示的资源的定位标识符。

格式:

Image

协议方案名:指定协议类型,不区分大小写

登录信息(可选): 用户名和密码作为获取资源的必要信息

服务器地址:使用绝对URI必须指定待访问的服务器地址,名称可以是hack.jp这种DNS可解析的名称,或是192.168.1.1这类IPv4地址名,或是[0:0:0:0:0:0:0:1]这种方括号IPv6地址名.

服务器端口号(可选):指定服务器连接的网络端口号.

带层次的文件路径:指定服务器上的文件路径来定位特指的资源.

查询字符串(可选):针对已指定的文件路径内的资源,查询文件名称(?)

片段表示符(可选):可标记已获取资源中的子资源.

第二章 简单的HTTP协议

请求与响应

请求报文

构成:请求报文是由请求方法、请求URL、协议版本、可选的请求首部字和内容实体构成的。

Image

响应报文

构成:响应报文基本上由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。

Image

HTTP是不保存状态的协议

HTTP是一种不保存状态,即无状态协议,其自身不具备保存之前发送过的请求或响应的功能

注意:可以使用Cookie 技术实现期望的保持状态功能

请求URI定位资源

HTTP协议使用URI定位互联网上的资源。

指定请求URI的方式:

Image

图 :以 http://hackr\.jp/index\.htm作为请求的例子。

若是对服务器本身发起请求,可以用一个 * 来代替请求URL

例:

Image

告知服务器意图的HTTP方法

GET :获取资源

作用 : 请求已被URI识别的资源(符合URI格式?)。若请求文本,则返回文本,若请求的是特殊程序,则返回执行后结果。

Image

POST :传输实体主体

Image

GET也能传输主体,但两者有区别。

区别:

+ GET一般用于 获取/查询 资源信息,而POST一般用于 更新 资源信息

+ GET提交请求的数据会附在URL之后(**提交的数据会在地址栏中显示出来 且 长度会有限制 **),POST提交把提交的数据放置在HTTP包的包体(Request body)中。

+ GET采用 只支持文本(ASCII字符),并且采用urlencode

POST 支持文本,采用urlencode,也支持二进制,能够用来传输文件

PUT:传输文件

作用 : HTTP/1.1 的 PUT方法不带验证机制,存在安全性问题

Image

HEAD : 获得报文首部

作用 : 确认URI的有效性和资源更新的日期时间

Image

DELETE : 删除文件

作用:按请求URI删除指定的资源,但存在和PUT方法一样的安全性问题

Image

OPTIONS : 询问支持的方法

作用 : 查询针对请求URI指定的资源支持的方法

Image

TRACE:追踪路径

作用 : 让Web服务器端将之前的请求通信环回给客户端

内容:在MAX-Forward中输入一个数值,每经一个服务器器端减一,为0时停止传输,最后收到的服务器返回200 OK的响应.(易引发XST攻击)

Image

Image

CONNECT:要求用隧道协议连接(*)

要求在于代理服务器通信时建立隧道,用隧道协议进行TCP通信.主要使用 SSL 与 TLS 加密后经网络隧道传输.

格式:

Image

报文结构:

Image

HTTP/1.0和HTTP/1.1支持的方法

Image

持久连接

HTTP的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。发送时会造成无谓的TCP连接断开。

Image

持久连接:

特点:只要任意一端没有明确提出断开连接,则保持TCP连接状态。

Image

管线化

作用: 一个请求发出后,不用等待响应就可直接发送下一个请求。

Image

使用Cookie的状态管理

上文提到可用Cookie实现保持状态功能

简略地来讲:Cookie技术通过在请求响应报文中写入Cookie信息来控制客户端的状态。

一般步骤:

Image

在客户端第一次连接到服务器时,服务器会在响应报文中添加一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。

Image

第二次客户端向服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端接受后会对发送的Cookie值进行匹配,得到之前的状态信息

Image

Image

第三章 HTTP报文内的HTTP信息

HTTP报文

概念:用于HTTP协议交互的信息被称为HTTP报文。客户端的HTTP报文叫请求报文,服务器端的叫响应报文。

结构:大致可分为 报文首部 和 报文主体 ,用空行(CR+LF)来划分。

Image

请求报文

结构:

Image

实例:

Image

请求行:包含用于请求的方法请求**URI **和 HTTP版本

首部字段:包含请求的各种条件和属性的各类首部

PS:一般包含四种首部 : 通用首部、请求首部、响应首部、实体首部。

响应报文

结构:

Image

实例:

Image

状态行:包含表明响应结果的 状态码原因短语HTTP版本

首部字段同上。

编码提供传输速率

① 区分 报文主体 与 实体主体

报文 :是HTTP通信的中的基本单位,由8位组字节流组成

实体 :作为请求或响应的有效载荷数据被传输,其内容由 实体首部 和 实体主体 组成

HTTP报文的主体用于 传输请求或响应的实体主体。(一般在进行编码操作时产生差异)

② 压缩传输内容的内容编码

类似于ZIP压缩文件,HTTP中的内容编码也对实体信息进行压缩,接受的客户端会进行解码。

内容编码指指名在实体内容上的编码格式。

常用的内容编码有

gzip(GNZ zip)、compress(UNIX系统的标准压缩)、deflate(zilb)、identity(不进行编码)、(*)

③ 分割传送的分块传输编码

分块传输编码 能 把实体主体分块 ,例如 在传输大容量数据时。通过把数据分割成多块,能让服务器逐步显示网页

分块传输编码 分割出的数据块,每一块都用十六进制标记块的大小,而且最后一块会用“0(CR+LF)”来表示。

④ 发送多种数据的多部分对象集合

MIME机制 使允许邮件处理文本,图片等多个不同类型的数据。

MIME 来描述标记数据类型,在MIME扩展中使用一种叫 多部分对象集合 的方法 来容纳多份不同类型的数据

多部分对象集合的对象有:

multipart/from-data

该对象在Web 表单文件上传时使用.

multipart/byteranges

该对象在 状态码 206响应报文包含了多个范围时使用。

PS:

在HTTP报文中使用多部分对象集合时,需要在首部字段里加上Content-type。

使用 boundary 字符串来划分多部分对象集合指名的各类实体。

例:

Image

⑤ 获取部分内容的范围请求

范围请求: 指定范围发送的请求

执行范围请求时,用到首部字段Range来指定资源的byte范围

byte指定形式:

Image

PS:针对范围请求,响应会返回状态码为206 Partial Content 的响应报文,若无法响应,则返回状态码 200 OK 和完整的实体内容。

⑥内容协商返回最合适的内容

简单的来说,就是服务器根据客户端的属性(如语言),提供给客户端最合适的资源。

内容协商技术有三种类型:

  1. 服务器驱动协商

    服务端对网页的自动处理

  2. 客户端驱动协商

    用户进行手动操作

  3. 透明协商

    上面两者的结合

第四章 返回结果的HTTP状态码

简略地说:

2XX是成功状态码

3XX是重定向码,服务器需要进行特殊处理来应对请求

4XX表示客户端处发生错误

5XX表示服务器端发生错误

汇总

(“借鉴”了一下菜鸟上的汇总( ̄▽ ̄)“)

第五章 与HTTP协作的Web服务器

用单台虚拟主机实现多个域名

注意:即同一个IP下可以对应多个域名,所以在发送HTTP请求时,必须在 Host 首部内完整指定主机名或域名的URI。

通信数据转发程序:代理、网关、隧道

源服务器:拥有资源实体的源服务器。

代理

**代理 **是有转发功能的应用程序,接受转发请求与响应。

基本行为:接受请求后转发给其他服务器,不改变URI。(PS:在转发时,需要附加Via首部字段以标记处经过的主机信息)

代理一般按两种基准分类:是否使用缓存 和 是否修改报文

缓存代理

代理转发响应时,缓存代理会将响应的副本作为缓存保存,当代理再次接受到相同资源的请求时,就可以不从源服务器获取资源,将缓存作为响应返回。

透明代理:

不对报文做任何加工的代理类型叫透明代理,反之叫非透明代理。

网关

网关 是转发其他服务器通信数据的服务器,可以对请求进行处理。

网关可以将HTTP请求转化为其他协议的通信,使通信线路上的服务器提供非HTTP服务。

隧道

隧道 在相距远的服务器和客户端间进行中转,确保其间进行按安全的通信(可使用 SSL等加密技术)

隧道不会解析HTTP请求,请求保持原样,在断开连接时结束。

保存资源的缓存

缓存服务器

代理服务器的一种,在转发服务器返回的响应时,会保留一份响应的副本。

Image

作用: 利用缓存可避免多次从源服务器转发资源

PS:基于客户端要求因素,缓存服务器会向服务器检查是否更新缓存。

客户端缓存

客户端浏览器中也存在缓存,这种缓存称为 临时网络文件。(同样具有检查更新的特性)

第六章 HTTP首部

(第六章你好多(;´д`)ゞ)

HTTP报文首部

HTTP请求报文

请求中,HTTP报文由 方法、URI、HTTP版本、HTTP首部字段 等部分组成

Image

HTTP响应报文

在响应中,HTTP报文由 HTTP版本、状态码、HTTP首部字段构成。

Image

HTTP首部字段

HTTP首部字段用来传递报文主体大小等信息。

HTTP首部字段由 首部字段名 和 字段值 构成,用“:”隔开。

格式:首部字段名:字段值

四种HTTP首部字段类型

①通用首部字段

请求报文和响应报文都会使用的类型

字段一览:

Image

Cache-Control字段

首部字段Cache-Control能够控制缓存的行为.

缓存请求指令一览:

Image

缓存响应指令一览:

Image

具体指令解释:

Public 指令

使用该指令时,明确表明其他用户也可利用缓存

Private 指令

执行该指令后,响应只以特定的用户作为对象.

No-cache 指令

该指令目的是 防止从缓存中返回过期的资源.

请求中包含,表示客户端不接收 缓存的资源.

响应中包含,表示缓存服务器不再对资源进行缓存.

若接收的首部字段中带参数值,如:

Image

则,客户端不会对该资源进行缓存(有参不缓存.无参可缓存)

No-store 指令

该指令规定缓存不能在本地存储请求或响应的任意部分.

使用no-store指令的情况一般是请求或响应中包含机密信息

控制可执行缓存的对象的指令:

s-maxage指令

Image

Max-age指令

Image

请求包含max-age指令时,如果指定时间大于判定时间,客户端接收缓存的资源,当指定值为0时,缓存服务器通常要向服务器确认缓存.

响应包含max-age指令时,缓存服务器不进行比较,max-age的数值代表资源保存的最长时间.

S-maxage 与 max-age 指令的功能相同,但是s-maxage 指令只适用供多位用户使用的公共缓存服务器.

Min-fresh指令

Image

该指令要求缓存服务器返回至少未过指定时间的缓存资源.(上表示过了60秒的资源不会进行返回)

Max-stale指令

Image

用 max-stale 指示缓存资源,即使过期客户端也照常接收.

(若未指定参数值,那么无论经过多久,都会接受响应.若指定数值,处于指定的时间内才会被客户端接受)

Only-if-cached 指令

该指令表示客户端仅在缓存服务器本地缓存目标资源的情况下才进行返回.

must-revalidate指令

该指令用来验证下一个响应缓存是否有效

Proxy-revalidate指令

该指令 要求所有缓存服务器在要返回缓存前检查其有效性

No-transform指令

该指令规定无论是请求还是响应中,缓存都不能改变实体主体的媒体类型.

Cache-Control 扩展

Image

通过该指令标记,可以扩展Cache-Control 首部字段内的指令.

Conenction字段

作用:

控制不再转发给代理的首部字段(逐跳首部)

格式:

Image

管理持久连接

格式:

Image

维持持久连接

Image

断开链接

Data字段

data字段表明船舰HTTP报文的日期与时间.

RFC1123中的格式(HTTP/1.1)

Image

RFC850中的格式(HTTP/1.1前)

Image

还有一种格式:

Image

Pragma字段

该字段仅作为与HTTP/1.0的向后兼容而定义.

格式(例):

Image

Trailer字段

trailer字段会事先说明在报文主体后记录了哪些首部字段.

Transfer-Encoding字段

该字段规定; 规定了传输报文主体时采用的编码方式.

Upgrade字段

该字段用来检测HTTP协议即其他协议是否可用更高的版本进行通信.

(对于该请求服务器科尔用 101 Switching Protocols状态码作为响应返回)

Via字段

使用首部字段Via是为了追踪客户端与服务器之间的请求和响应报文的传输路径,

Image

Warning字段

该字段通常会告诉用户一些与缓存相关的问题的警告.

格式:

Image

HTTP/1.1 警告码

Image

②请求首部字段名

从客户端向服务器端发送报文时使用的首部

字段一览:

Image

Accept字段

Accpet首部字段可通知服务器用户代理能够处理的媒体类型即其相对优先级。

形式:type/subtype

Image

增加优先级,使用q=来表示权重值;用分号进行分割;q范围为0~1;首先返回权重级高的媒体类型。

Accept-Charset字段

该字段用来通知服务器用户代理支持的字符集及其的相对优先顺序,且 可以一次指定多种字符集。

Image

Accept-Encoding字段

该字段用来告知服务器用户代理支持的内容编码及其优先级,可一次指定多种内容编码。

Image

Accept-language字段

该字段用来告知服务器用户代理能够处理的自然语言及其优先级,可一次指定多种自然语言集。(无指定自然语言集,返回默认的)

Authorization字段

该字段用来告知服务器用户代理的认证信息。

Image

Expect字段(*)

该字段告知服务器,期望出现某种特定行为,若服务器无法理解,则返回417状态码。

Image

From字段

该字段用来告知服务器使用用户代理 的用户的电子邮件地址。(可能因代理不同,电子邮箱也会被记录在User-Agent首部字段中)

Host字段

该字段告诉服务器,请求的资源所处的互联网主机名和端口号。

Image

该字段是在HTTP/1.1内唯一一个必须被包含在请求内的首部字段。

Host字段与 单台服务器分配多个域名有重要联系。

若服务器未设定主机名。则直接发送一个空值。

Image

If-watch字段

形如If-xxx这种样式的请求首部字段,称称为条件请求。服务器接收附带条件的请求后,只有判断指定条件为真时,才会执行请求。

Image

If-Modified-Since字段

该字段告知服务器若If-Modified-Since 字段值早于资源更新的时间。则希望能处理该请求,若在其后,则返回状态码 304 Not Found。

Image

If-None-Match字段

该字段与If-Match作用相同,实现原理相反。

If-Range字段

该字段告知服务器若指定的的If-Range字段值和请求资源的ETag值或时间相等,则作为范围请求处理,反之,返回全体资源。

If-Unmodified-Since字段

该字段与If-Modified-Since作用相同,实现原理相反。

Max-Forwards字段

每经过一次转发,数值减一,为零时返回响应。

一般通过 TRACE 和 OPTIONS 方法包含Max-Forward 字段

Proxy-Authorization字段

该字段包含的信息用于告知服务器认证所需信息。

Image

Range字段

获取部分资源的范围请求

Image

Referer字段

该字段会告知服务器请求的原始资源的URI

(一般处于安全性考虑,不发送此字段)

Image

Image

嗯哼哼?

TE字段

该字段会告知服务器客户端能够处理响应的传输编码方式及相对优先级,类似于Accept-Encoding。

Image

除此之外,该字段可以指定伴随tralier字段的分块传输编码方式。

应用方式:

Image

③响应首部字段

从服务器端向客户端返回报文时使用的首部

字段一览:

Image

Accept-Ranges字段

该字段用来告知客户端服务器是否能处理范围请求。

Image

Age字段

该字段能告诉客户端,源服务器是在多久前创建的响应,字段值为秒。

若创建该响应的是缓存服务器,Age是指缓存后的响应发起认证到认证完成的时间值,代理创建响应时必须带上字段Age

ETag字段

该字段可以告知客户端实体标识。是一种可将资源以字符串形式做唯一性标识的方式。

当资源更新时,ETag值也需更新。

强ETag值

实体发生任何变化都会改变其值。

Image

弱ETag值

只用于提示资源是否相同,会在字段开始处加 W 来区分。

Image

Location字段

使用该字段可做重定向的工作,将响应接收方引导只与请求URI位置不同的资源。

通常与 3xx :Redirection 的响应配合。

Image

Proxy-Authenticate字段

该字段会把代理服务器要求的认证信息发送给客户端。

Retry-After字段

该字段告知客户端应在多久后再次发送请求,主要配合 状态码503 Sever Unavailable或 3xx Redirt响应使用

字段值可以为 具体时间日期 或 创建响应后的秒数。

Image

Sever字段

该字段告知当前服务器上安装的HTTP服务器应用程序等各类信息

Image

Vary字段

该字段可对缓存进行控制,源服务器会向代理服务器传达本地缓存使用方法的命令。也就是说,若Vary后首部字段相同,则返回缓存,若不同,则访问源服务器。

Image

WWW-Authenticate字段

该字段用于HTTP访问认证

例:

Image

该字段包含 认证的方式(basic) 及 Reequest-URI安全域字符串(realm)

④实体首部字段

针对报文的实体部分使用的首部

字段一览:

Image

Allow字段

该字段用于通知客户端能够支持Request-URI指定资源的所有HTTP方法,

当服务器接受到不支持的HTTP方法时,返回 405 状态码 和 同时吧所有能支持的方法写入 Allow 内

Image

Content-Encoding字段

该字段会告诉客户端服务器对实体的主体部分的内容编码方式。

Image

Content-language字段

该字段会告诉客户端对实体的主体部分的自然语言

Content-Length

该字段表明了实体主体部分的大小(单位:字节)

Image

Content-Location字段

该字段给出与报文主体部分相对应的URI。

与Location不同,表示的是报文主体返回资源对应的URI

Content-MD5字段

该字段的字段值是 一串由MD算法生成的值,用于检测报文主体在传输过程中是否保持完整,及确认传输到达。

Image

接受的客户端会重新执行一遍相同的MD5算法,来作比较检测。

Content-Range字段

该字段告知客户端响应中的实体部分的那个部分符合范围请求,及其整个实体大小。

Image

Content-Type字段

说明了实体主体内对象的媒体类型。

Image

Expires字段

该字段会将资源失效的日期告诉客户端。

若不希望资源被缓存,则在字段值内写入与 Date 相同的值。

当有max-age指令时,先处理max-age指令。

Image

Last-Modified字段

该字段指明资源最终修改的时间。

Image

非HTTP/1.1首部字段

不限于上述字段,还有 Cookie , Set-Cookie 等其他在RFC中定义的首部字段.

为Cookie服务的首部字段
Set-Cookie字段

当服务器开始管理客户端状态时,会事先告诉各种信息。

Image

各属性:

Image

expires属性

指定浏览器可发送Cokie的有效期。

若被省略,增有效期默认在浏览器关闭之前。

服务器端没有显示删除Cookie的方法,只能覆盖已过期的Cookie来达到目的。

Path属性

可以限定Cookie发送范围的文件目录,但可以绕过

domain属性

Cookie适用的域名,不指定为好(更安全)

Secure 属性

限制只能在 HTTPS下才能发送Cookie

HttpOnly属性

主要目的是 防XSS攻击。使得JS无法读取Cookie内容。

Cookie字段

Image

就是客户端为得到保持状态功能,而发送给服务器的Cookie。

X-Frame-Options字段

属于响应首部,能控制网站内容在其他网站的Frame标签的显示

目的是防止点击劫持攻击。

字段值:

  1. DENY:拒绝

  2. SAMEORIGIN:仅允许同源域名下的页面匹配时许可。

X-XSS-Protection字段

属于响应首部,用来防止XSS攻击。

字段值:

0 : 将XSS过滤设置为无效状态。

1 :将XSS过滤设置成有效状态。

DNT字段

属于请求首部,用来拒绝个人信息被收集。

字段值:

0 :同意被追踪

1 :拒绝被追踪

P3P字段(*)

属于响应首部,利用P3P技术可以让网站上的个人隐私变成供程序理解的形式,来保护用户隐私

端对端首部 和 逐跳首部

端对端首部(缓存代理)“End to End”

在整个传输过程中会保持不变,必须保存在缓存中且必须转发

逐跳首部(非缓存代理)“Hop-by-hop”

只在单次转发中有效,会因通过缓存或代理而不再转发

除下列八个字段,其他所有字段属于端到端首部

• Connection
• Keep-Alive
• Proxy-Authenticate
• Proxy-Authorization
• Trailer
• TE
• Transfer-Encoding
• Upgrade

第八章 确认访问用户身份的认证

HTTP使用的认证方式

HTTP/1.1

  • BASIC认证(基本认证)

  • DIGEST认证(摘要认证)

  • SSL客户端认证

  • FormBase认证(基于表单认证)

BASIC认证

步骤概图

Image

  1. 请求资源需要BASIC认证时,服务器会随状态码401,返回带WWW-Authorization Required首部字段的响应。

  2. 接收响应后,客户端发送Authorization字段,该字段中写入经过base64 编码 的用户ID与密码

DIGSET认证

Image

PS:

nounce值是一种由Base64编码的十六进制的组成形式,实际内容以来服务器的具体实现。

REspone值为经过MD5运算的密码

SSL客户端认证

SSL客户端认证是借由HTTPS的客户端证书完成认证的方式。凭借客户端证书认证,服务器可确认访问客户端。

认证步骤

步骤一:接收到需要认证资源的请求,服务器会发送 Certificate Request 报文,要求客户端提供客户端证书。

步骤二:用户选择将发送的客户端证书后,客户端会把客户端证书信息以 Client Certificate 报文方式发送给服务器。

Image

步骤三:

服务器验证客户端证书验证通过后,可领取证书内客户端的公开密钥,然后开始HTTPS加密通信。

双因素认证:

一般,SSL客户端不会仅靠证书完成认证,一般会和表单认证组合形成一种双因素认证。

基于表单认证

该认证方法不是在HHTP协议中定义的。

客户端向服务器的上的Web程序发送登录信息,按登录信息的验证结果认证。

Session管理及 Cookie管理

一般使用Cookie来管理会话

Image

PS:

客户端一般使用POST方法把请求发送给服务器,这时会使用HTTPS通信来进行HTML表单画面的显示和用户输入数据的发送.

服务器会发放用以识别用户的Session ID , 通过验证从客户端发送过来的登录信息进行身份认证 , 然后把用户的认证状态与session ID 绑定后记录在服务器端.

客户端接收到发来的 Session ID后,会将其作为Cookie保存在本地,供下次访问使用.

第九章 基于HTTP功能追加协议

HTTP的初始创造目的时当作传输HTML文档的协议.但不能满足如今更加多样化的需求(食大便了,带人),因此需要额外添加新功能.

Ajax的解决方法

Ajax(Asynchronous JavaScript and XML)异步JavaScript 与 XML技术,是一种有效利用 JavaScript 和DOM 的操作,以达到局部Web页面替换加载异步通信手段.

由于只更新局部页面,响应中传输的数据量会因此而减少.

Image

Comet的解决方法

每当服务器有内容更新,Comet不会让请求等待,直接返回响应,.是一种通过延迟应答,模拟实现服务器的端详客户端推送的功能.

Comet会将响应置于挂起状态,当服务器有内容更新时,再返回该响应

Image

内容上虽然可以做到实时更新,但为了保留响应.一次连接的持续时间也会变长,为了维持连接会消耗更多的资源.

SPDY协议

Google发布了SODT,其开发目标旨在解决HTTP的性能瓶颈.

SPDY的设计与功能

SPDY是在TCP/IP的应用层与运输层之间通过新加会话层的形式运作.并且SPDY规定在通信中使用SSL

SPDY以会话层的形式加入,控制对数据的流动,但还是采用HTTP建立连接,因此可兼容HTTP功能.

Image

使用SPDY后,HTTP新增功能

  • 多路复用流

通过单一的TCP连接可以无限制处理多个HTTP请求.

  • 赋予请求优先级

可以给请求诸葛分配优先级顺序,主要是为了在发送多个请求时,解决因带宽低而导致响应变慢的问题

  • 压缩HTTP首部

压缩HTTP请求与首部,通信发送的字节数变少.

  • 推送功能

支持服务器主动向客户端推送数据的功能.

  • 服务器提示功能

服务器可以主动提示客户端请求所需的资源,可以避免不必要的请求.

使用浏览器进行全双工通信的WebSockt

WebSocket ,Web浏览器之间的全双工通信标准.开发目的是为了解决Ajax 和 Comet 里XMLHttpRequest 附带的问题

Websocket的主要特点

建立在HTTP基础上的协议

无论是服务器还是客户端,任意一方都可直接向对方发送报文

推送功能

支持服务器主动向客户端推送数据的功能.

减少通信量

Websockker连接建立后,会一直保持连接状态,但更优于HTTP连接

Websocket握手

为了实现Websocket通信,需要用到HTTP的Upgrade首部字段,告知服务器通信协议发生改变,达到握手的目的

  • 握手~请求

Image

Sec-WebSocket-Key 字段 记录着握手过程中的键值

Sec-WebSocket-Protocol 字段 记录使用的子协议

子协议按WebSocket 协议标准在连接分开时使用,定义那些连接的名称

  • 握手~响应

Image

Sec-WebSocket-Accept 的字段值是由 握手请求中的Sec-WebSocket-Key的字段值生成的.

  • 成功握手后,不再使用HTTP的数据帧,采用WebSocket独立的数据帧

Image

WebSocket API(*)

JS可调用 **The WebSocket API **内提供的 WebSocket程序接口,实现WebSocket协议下全双工通信

Image

Web服务器管理文件的WebDAV

WebDAV是一个可对Web服务器上的内容直接进行文件复制,编辑等操作的分布式文件系统.作为扩展HTTP/1.1的协议定义在RFC4918

除了创建、删除文件等基本功能,它还具备文件创建者管理、文件编辑过程中禁止其他用户内容覆盖的加锁功能,以及对文件内容修改的版本控制功能.

Image

扩展HTTP/1.1的WebDAV

针对服务器上的资源,新增了一些概念

Image

  • 集合(Collection):是一种统一管理多个资源的概念。以集合为 单位可进行各种操作。也可实现类似集合的集合这样的叠加。

  • 资源(Resource):把文件或集合称为资源。

  • 属性(Property):定义资源的属性。定义以“名称 = 值”的格式执
    行。

  • 锁(Lock):把文件设置成无法编辑状态。多人同时编辑时,可 防止在同一时间进行内容写入。

WebDAV内新增的方法及其状态码

PROPFIND :获取属性
PROPPATCH :修改属性
**MKCOL **:创建集合
**COPY **:复制资源及属性
MOVE :移动资源
LOCK :资源加锁
UNLOCK :资源解锁为配合扩展的方法,状态码也随之扩展。
102 Processing :可正常处理请求,但目前是处理中状态
207 Multi-Status :存在多种状态
422 Unprocessible Entity :格式正确,内容有误
423 Locked :资源已被加锁
424 Failed Dependency :处理与某请求关联的请求失败,因此不再维持依赖关系
507 Insufficient Storage :保存空间不足

WebDAV的请求与响应实例

使用PROFIND方法发起的请求

Image

与之对应的响应

Image

Image

第十章 构建Web内容的技术

HTML

HTML是为了发送web上的超文本而开发的标记语言。

由HTML构成的文档经过浏览器的解析、渲染后,呈现出来的结果就是web页面

Image

设计应用CSS

CSS可以指定如何展现HTML内地各种元素,属于样式表标准之一

Image

可在选择器(sekector).logo的指定范围内,使用{}括起来的声明块中写明的padding:20px等声明语句应用指定的样式。

动态HTML(*)

动态HTML。是指时使用客户端脚本语言将静态HTML内容变成动态的技术的总称。

该技术是通过调用客户端脚本语言JS,实现对HTML的Web页面的动态改造,利用DOM可指定欲发生动态变化的HTML元素。

更易控制的HTML和DOM

DOM是用以操作HTML文档和XML文档的API。

通过调用JS等脚本语言对DOM的操作,可更加方便控制HTML。

例:

Image

通过JS可以改变第三个P元素的文字颜色

Image

Web应用

Web应用是指通过Web功能提供的应用程序。

将类似于程序创建的内容称为动态内容。事先准备好的内容称为静态内容

Web应用作用于动态内容之上

Image

CGI

CGI(Common Gateway Interface)通用网关接口,是指web服务器在接收到客户端发送的请求后转发给程序的一组机制。

CGI能作用程序,使其对请求内容做出相应的动作,如创建HTML等动态内容

使用CGI的程序叫 CGI程序 。

Image

缺点:由于在每次接到请求后程序都要跟着启动一次,一旦访问量过大,Web服务器要承载很大的负载.

Servlet

Servlet 是一种能在服务器上创建动态内容的程序,是用Java语言实现的一个接口,属于面向企业级Java的一部分.

Servlet运行在与web服务器相同的进程中,受到的负载较小,Servlet运行环境叫Web容器或Servlet容器,可以缓解CGI的缺点.

Image

数据发布的格式及语言

XML

XML (eXtensible Markup Language)可扩展标记语言,是一种可按应用目标进行扩展的通用标记语言.

XML 和 HTML 都是从标准通用标记语言SGML简化而成,相较于HTML,对数据的处理方式做了特殊处理.

例:

Image

HTML文档遇到不同的应用格式会不同,不适合记录数据结构,用XML改写

Image

XML的结构基本是用标签分割成的树形结构,通过语法分析器(parser)的解析功能可以解析出XML结构并得到数据元素.

RSS/Atom

RSS(简易信息聚合/聚合内容)和Atom 都是发布新闻或博客日志等更新信息文档的格式的总称.都用到了XML.

Image

JSON

JSON(JavaScript Object Notation)是一种以JS的对象表示法为基础的轻量级数据标记语言.

能处理的数据类型** false/null/true/对象/数组/数字/字符串** 七种.

Image

让数据更轻更纯粹......

第十一章 Web的攻击技术

针对web的攻击技术

HTTP协议本身不具备必要的安全功能,应用HTTP协议的服务器客户端,以及运行在服务器上的Web

应用等资源是攻击目标。

在客户端可篡改请求

在HTTP请求报文内加载攻击代码,就能发起对Web应用的攻击。通过 URL查询字段或表单,HTTP首部、Cookie等途径可传入攻击代码。

针对web应用的攻击模式

  • 主动攻击

    • 以服务器为目标的主动攻击

Image

主动攻击 是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式,攻击者需要访问到服务器上的资源。

  • 被动攻击

    • 以服务器为目标的被动攻击

Image

被动攻击 是指利用圈套策略执行攻击代码的攻击模式。攻击者不直接对目标Web应用访问发起攻击。

具有代表性的攻击 跨站脚本攻击跨站点请求伪造

利用用户身份攻击企业内部网络

Image

因输出值转义不完全引发的安全漏洞

实施Web应用的安全对策可大致分为以下两部分

  • 客户端的验证

  • 服务器端的验证

    • 输入值验证

    • 输出值转义

Image

输入值验证通常是指检查是否是符合系统工业逻辑的数值或检查的字符编码等预防对策。

当输出值转义不完全时,会因触攻击者传入的攻击代码,而给输出对象带来损害

跨站脚本攻击(XSS)

跨站脚本攻击(XSS),是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击 。 动态创建的HTML部分有可能隐藏着安全漏洞。

XSS一般会有以下手段

  • 利用虚假输入表单骗取用户个人信息。

  • 利用脚本窃取用户的 Cookie 值,被害者在不知情的情况下, 帮助攻击者发送恶意请求。

  • 显示伪造的文章或图片

案例:(在动态生成HTML处发生)

Image

像这样一个页面,在姓名一栏输入了 <s> 标签,浏览器会将其解析成HTML标签.利用此原理, 使用script标签可以发动攻击

Image

通过地址栏中URI的查询字段指定ID,即相当于在表单内自动填写字符串的功能,于是我们可以利用这点来创建嵌入恶意代码的URL

Image

浏览器打开该URI后,直观上没有发生变化,但脚本已经开始运行了,用户输入的ID与密码会直接发送到攻击者的网站.

利用类似方式,还可以窃取到用户的Cookie值.

SQL注入攻击

SQL注入是针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击.

一般会有以下手段

  • 非法查看或篡改数据库内的数据

  • 规避认证

  • 执行和数据库服务器业务关联的程序等

攻击实例

这样一个购物网站

Image

正常操作

Image

可见flag=1为可显示条件,flag=0为隐藏内容.但是我们可以在地址栏进行改写,加上 -- ,and flag=1 会被忽略掉.

Image

可令原本被隐藏的书籍显示出来.

OS命令注入攻击

OS命令注入攻击

OS命令注入攻击(OS Command Injection) 是指通过Web应用,执行非法的操作系统命令达到攻击的目的.(通过Shell函数)

在Web应用调用Shell时存在疏漏时,可执行插入的OS命令.

攻击实例:

该网页是发送邮件功能

Image

在该表单的源代码中,有

Image

插入

Image

在OS命令中,会被解析为分隔多个执行命令的标记.

于是,在分隔后,sendmail命令会执行插入的命令,从而窃取账户信息.

HTTP首部注入攻击

HTTP首部注入攻击(HTTP Header Injection),是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击.(被动攻击)

向首部主体内添加内容的攻击称为HTTP响应截断攻击(HTTP Response Splitting Attack)

一般手段:

  • 设置任何 Cookie 信息

  • 重定向至任意 URL

  • 显示任意的主体(HTTP 响应截断攻击)

攻击实例

Image

将 该字段最后的类别ID改为

Image

此处输入的**%0D%0A,原本属于首部字段的查询值部分,然而经过解析后变成了换行符**,后面的Set-Cookie成为了新的首部字段.

类似这样,攻击者keke在响应中插入任意首部字段.

HTTP响应截断攻击

HTTP响应截断攻击与HTTP首部字段攻击顺序相同,但是要插入两个**%0D%0A,即两个换行符,**可做出首部与主体分隔所需的空行.显示伪造的主体,

邮件首部注入攻击

邮件首部注入攻击(Mail Header Injection)是指Web应用中的邮件发送功能,攻击者通过向邮件首部 To 或 Subject 内任意添加非法内容发起的攻击.

攻击实例:

还是一个邮件网页(咨询表单)

Image

在邮箱地址一栏中填入

Image

一旦咨询表单所在的Web应用接收该换行符,可能实现 对Bcc邮件地址的追加发送.

或是加两个换行符,实现对邮件文本内容的的篡改

Image

用同样的方法,可能改写 To 和 Subject 等任意邮件首部,或添加附件等.

目录遍历攻击

目录遍历攻击(Directory Traversal) 攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击,也称 路径遍历攻击(Path Traversal).

原理:在有外部指定文件名的处理存在疏漏的情况下,用户可使用 ../的相对路径定位到绝对路径下

攻击案例:

原本的请求文件URI为

Image

若设置为

Image

如果read.php没有设限,那么原本不公开的为文件会被展现出来

远程文件包含漏洞

远程文件包含漏洞(remote File Inclusion)是指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,即可运行任意脚本的一种攻击

该漏洞主要存在于PHP中.对于PHP的include 或 require 来说,这是一种可通过设定,指定外部服务器端URL为文件名的功能,在PHP5.2.0后废用

攻击案例:

正常操作

Image

该脚本的部分源码为

Image

若输入如下URL

Image

若该Web的 include 可以引入外部服务器的URL,那么实现在cmd.php准备

Image

就可在服务器上OS命令了

因设置或设计上的缺陷引发的安全漏洞

强制浏览

强制浏览安全漏洞是指 从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件

对于原本不愿公开的文件,为了保证安全会隐藏其URL。但通过某些方法易使URL产生泄露

  • 文件目录一览

未做防范措施,一般会在log文件夹下

  • 容易被推测的文件名及目录名

  • 备份文件

  • 经认证才可访问的文件,直接通过URL访问能绕过一些认证

案例:

Image

类似这样的博客,需要权限访问,但是通过对图片URL的分析,可能可以直接通过URL访问博客

不正确的错误消息处理

不正确的错误消息处理(Error Handing Vulnerability)的安全漏洞是指 web应用的错误信息内包含对攻击者有用的信息。

简单来讲:就是对 Web应用 和 数据库等应用 抛出的错误信息没有进行抑制设定,从而导致可能对攻击者有利的信息泄露

开放重定向

开放重定向(Open Redirect)是一种对指定的任意URL作重定向跳转的功能。

加入指定的重定向URL到某个具有恶意的Web网站,那么用户会被诱导至那个Web网站

案例:

Image

改写为

Image

可信度高的网站若开启重定向功能,则可能被选中作为钓鱼攻击的跳板

因会话管理疏忽引发的安全漏洞

会话劫持

会话劫持(Session Hijack)是攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。

具备认证功能的Web应用将 会话ID的会话管理机制 作为管理认证状态的主流方式。会话ID记录了Cookie等信息,服务器端会将会话ID与认证状态 一对一匹配管理

盗走会话ID的几种方式:

  • 通过非正规的生成方法推测会话 ID

  • 通过窃听或 XSS 攻击盗取会话 ID

  • 通过会话固定攻击(Session Fixation)强行获取会话 ID

案例:

Image

会话固定攻击

对于以窃取目标会话 ID 为主动攻击手段的会话劫持而言,会话固定攻击(Session Fixation)攻击会强制用户使用攻击者指定的会话 ID(被动攻击。)

案例:

Image

攻击者用服务器给出的 会话ID 设计陷阱引诱用户认证,之后 攻击者可以伪装成用户登录网站

跨站请求伪造

跨站请求伪造(Cross-site Request Forgery CSRF)攻击, 是指 攻击者通过设计好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新(被动攻击)

案例:

Image

当用户为已认证状态时,攻击者会在留言板上发布含恶意代码的评论,一旦用户访问该留言板时,恶意代码会被解析,以用户的身份进行操作

其他安全漏洞

密码破解

密码破解攻击(Password Cracking) 即算出密码,突破认证。

密码破解一般为两种手段

  • 通过网络的密码试错

    • 穷举法(略)

    • 字典攻击

      字典攻击是指利用事先收集好的候选密码(经过各种组合方法后存入字典)枚举字典中的密码,尝试通过认证的一种攻击手段

  • 对已加密密码的破解

    • 通过 穷举法&字典攻击进行类推

    • 彩虹表

      彩虹表(Rainbow Table)是由明文密码即与之对应的散列值构成的一张数据库表。可以用来缩短 穷举法&字典攻击 的时间

    • 拿到密钥

    • 加密算法的漏洞

点击劫持

点击劫持(Clickjacking)是利用透明的按钮或链接做成陷阱,覆盖在Web页面之上。诱使不知情的用户点击的攻击手段。又称为界面伪装。

DoS攻击

DoS攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击。(攻击对象不仅限于Web网站)

主要为两种手段

  • 集中利用访问请求造成资源过载,资源用尽的同时,实际上服务就呈停止状态

  • 通过攻击安全漏洞使服务停止

Image

多台计算机发起的Dos攻击称为*DDoS攻击( Distributed Denial of Service attack*DDos攻击常利用被感染病毒的计算机做跳板

后门程序

后门程序(Backdoor)是指开发设置的隐藏入口,可不按正常步骤使用受限功能。

通常后门程序有三类

  • 开发阶段作为 Debug 调用的后门程序

  • 开发者为了自身利益植入的后门程序

  • 攻击者通过某种方法设置的后门程序

Mission Over!!!!