读书笔记 - 《图解HTTP》

254 阅读29分钟

第一章 了解Web及网络基础

TCP/IP是互联网相关的各类协议族的总称。

  • TCP/IP协议族按层次分别分为以下4层:

    • 应用层:决定了向用户提供应用服务时通信的活动;
    • 传输层:提供处于网络连接中的两台计算机之间的数据传输;
    • 网络层:处理在网络上流动的数据包;
    • 数据链路层:处理连接网络的硬件部分。
  • IP是一种协议的名称,作用是把各种数据包传送给对方。

    • 确保传到对方的两个重要条件:
      • IP地址(可变换)
      • MAC地址(不变)
    • 使用ARP协议凭借MAC地址进行通信
      • IP间的通信依赖MAC地址。采用ARP协议,根据通信方的IP地址就可以反查出对应的MAC地址。
    • 没有人能够全面掌握互联网中的传输状况
      • 路由选择:在到达通信目标前的中转过程中,那些计算机和路由器等网络设备只能获悉很粗略的传输路线。
    • 确保数据能到达目标
      • 三次握手 ![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/9/173332be8f9df40c~tplv-t2oaga2asx-image.image)
  • DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。

  • 各种协议与HTTP协议的关系

  • URIURL

    • URI:统一资源标识符(Uniform Resource Identifier)

    • URL:统一资源定位符(Uniform Resource Locator)

    • URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。可见URLURI的子集。

第二章 简单的HTTP协议

  • 请求报文:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成;
  • 响应报文:由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
  • HTTP是无状态协议,为了实现期望的保持状态功能,引入了Cookie
  • HTTP协议使用URI定位互联网上的资源,客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求URI包含在内,,如果不是访问特定资源而是对服务器本身发起请求,可以用一个*来代替请求URI
  • 方法:方法的作用在于,可以指定请求的资源按期望产生某种行为
方法
用途
GET获取资源。用来请求访问已被URI识别的资源
POST传输实体主体
HEAD获取报文首部。不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等
PUT传输文件。要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置不带验证机制,任何人都可以上传文件,存在安全性问题
DELETE删除文件。与PUT相反与PUT方法一样
OPTIONS询问支持的方法
TRACE追踪路径。让Web服务器端将之前的请求通信环回给客户端它容易引发XST攻击
CONNECT要求用隧道协议连接代理
  • 三次握手四次挥手

    • 持久连接
    • 管线化
  • Cookie

    • 无状态协议的优点:减少服务器的CPU及内存资源的消耗
    • Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态,Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。

第三章 HTTP报文内的HTTP信息

  • HTTP报文:用于HTTP协议交互的信息,由多行(用CR+LF作换行符)数据构成的字符串文本,大致分为报文首部和报文主体两块

    • 请求端(客户端)的HTTP报文叫做请求报文
    • 响应端(服务器端)的叫做响应报文
  • 报文首部内容:

    • 请求行:包含用于请求的方法,请求URIHTTP版本。
    • 状态行:包含表明响应结果的状态码,原因短语和HTTP版本。
    • 首部字段:包含表示请求和响应的各种条件和属性的各类首部,一般有4种首部,分别是:通用首部、请求首部、响应首部和实体首部。
    • 其他:可能包含HTTPRFC里未定义的首部(Cookie等)。
  • 传输过程中通过编码提升传输速率

    • 报文主体和实体主体

      • 报文:HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输
      • 实体:作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
      • 通常报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。
    • 内容编码:指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。

      • gzipGNU zip
      • compress:UNIX系统的标准压缩
      • deflate:zlib
      • identity:不进行编码
    • 分块传输编码

  • 多部分对象集合,多部分对象集合的每个部分类型中,都可以含有首部字段。另外,可以在某个部分中嵌套使用多部分对象集合。

    • multipart/form-data:Web表单文件上传时使用
    • multipart/byteranges:状态码206(Partial Content,部分内容)响应报文包含了多个范围的内容时使用
  • 范围请求

    • 针对范围请求,响应会返回状态码为206 PartialContent的响应报文
    • 对于多重范围的范围请求,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文
    • 如果服务器端无法响应范围请求,则会返回状态码200 OK和完整的实体内容。
  • 内容协商:客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。

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

当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送。

301、302标准是禁止将POST方法改变成GET方法的,但实际使用时大家都会这么做。

不少返回的状态码响应都是错误的,但是用户可能察觉不到这点。比如Web应用程序内部发生错误,状态码依然返回200 OK,这种情况也经常遇到。

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

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

利用虚拟主机(Virtual Host,又称虚拟服务器)的功能,一台HTTP服务器搭建多个Web站点

在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI

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

HTTP通信时,除客户端和服务器以外,还有一些用于通信数据转发的应用程序,例如代理、网关和隧道。它们可以配合服务器工作。

  • 代理


    代理不改变请求URI,会直接发送给前方持有资源的目标服务器。在HTTP通信过程中,可级联多台代理服务器。请求和响应的转发会经过数台类似锁链一样连接起来的代理服务器。转发时,需要附加Via首部字段以标记出经过的主机信息。

  1. 缓存代理:转发响应时,将资源保存在代理服务器上
  2. 透明代理:不对报文做任何加工处理
  • 网关


    能使通信线路上的服务器提供非HTTP协议服务,提高通信安全性

  • 隧道

    按要求建立起一条与其他服务器的通信线路,届时使用SSL等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信。

保存资源的缓存

缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间。

缓存服务器的优势在于利用缓存可避免多次从源服务器转发资源。因此客户端可就近从缓存服务器上获取资源,而源服务器也不必多次处理相同的请求了。即便缓存服务器内有缓存,也不能保证每次都会返回对同资源的请求。因为这关系到被缓存资源的有效性问题

缓存不仅可以存在于缓存服务器内,还可以存在客户端浏览器中。以Internet Explorer程序为例,把客户端缓存称为临时网络文件(Temporary InternetFile)。

第六章 HTTP首部

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

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

使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。

当HTTP报文首部中出现了两个或两个以上具有相同首部字段名时会怎么样?这种情况在规范内尚未明确,根据浏览器内部处理逻辑的不同,结果可能并不一致。有些浏览器会优先处理第一次出现的首部字段,而有些则会优先处理最后出现的首部字段。

4种字段类型:

  • 通用首部字段(General Header Fields)请求报文和响应报文两方都会使用的首部。
  • 请求首部字段(Request Header Fields)从客户端向服务器端发送请求报文时使用的首部。
    补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
  • 响应首部字段(Response Header Fields)从服务器端向客户端返回响应报文时使用的首部。
    补充了响应的附加内容,也会要求客户端附加额外的内容信息。
  • 实体首部字段(Entity Header Fields)针对请求报文和响应报文的实体部分使用的首部。
    补充了资源内容更新时间等与实体有关的信息。

通用首部字段

指令

作用

指令参数

含义

Cache-Control

操作缓存的工作机制

public

其他用户也可利用缓存

private

以特定的用户作为对象

no-cache

客户端将不会接收缓存过的响应

no-store

暗示请求(和对应的响应)或响应中包含机密信息

s-maxage

同 max-age,只适用于公共缓存服务器

max-age

缓存资源缓存时间数值比指定时间的数值小,则接收缓存资源

min-fresh

要求缓存服务器返回至少还未过指定时间的缓存资源

max-stale

即使过期也照常接收

only-if-cached

缓存服务器本地缓存目标资源的情况下才会要求其返回

must-revalidate

代理向源服务器验证即将返回的响应缓存是否有效

proxy-revalidate

必须再次验证缓存的有效性

no-transform

缓存不能改变实体主体的媒体类型

Connection

控制不再转发给代理的首部字段

管理持久连接

不再转发的字段

控制不再转发给代理的首部字段

close/keep-alive

管理持久连接

Date

创建HTTP报文的日期和时间

Pragma

历史遗留字段

no-cache

Trailer

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

Transfer-Encoding

规定了传输报文主体时采用的编码方式

Upgrade

检测协议是否可使用更高的版本

使用首部字段Upgrade时,需要额外指定Connection:Upgrade

Via

追踪请求和响应报文的传输路径

Warning

告知用户一些与缓存相关的问题的警告

[警告码][警告的主机:端口号]“[警告内容]”([日期时间])

请求首部字段

指令

作用

Accept

用户代理能够处理的媒体类型及相对优先级

Accept-Charset

用户代理支持的字符集及相对优先级

Accept-Encoding

用户代理支持的内容编码及优先级

Accept-Language

用户代理能够处理的自然语言集及相对优先级

Authorization

用户代理的认证信息(证书值)

Expect

期望出现的某种特定行为

From

用户代理的用户的电子邮件地址

Host

请求的资源所处的互联网主机名和端口号

If-Match

匹配资源所用的实体标记(ETag)值

If-Modified-Since

字段值早于资源的更新时间,则希望能处理该请求

If-None-Match

与If-Match相反

If-Range

字段值和请求资源的ETag值或时间相一致时,作为范围请求处理,否则返回全体资源

If-Unmodified-Since

与If-Modified-Since相反

Max-Forwards

当服务器接收到Max-Forwards值为0的请求时,则不再进行转发,而是直接返回响应

Proxy-Authorization

告知服务器认证所需要的信息

Range

告知服务器资源的指定范围

Referer

告知服务器请求的原始资源的URI

TE

告知服务器客户端能够处理响应的传输编码方式及相对优先级

User-Agent

将创建请求的浏览器和用户代理名称等信息传达给服务器

响应首部字段

指令

作用

Accept-Ranges

告知客户端服务器是否能处理范围请求

Age

告知客户端源服务器在多久前创建了响应

ETag

能告知客户端实体标识,资源更新时,ETag值也需要更新

Location

将响应接收方引导至某个与请求URI位置不同的资源

Proxy-Authenticate

把由代理服务器所要求的认证信息发送给客户端

Retry-After

告知客户端应该在多久之后再次发送请求

Server

告知客户端当前服务器上安装的HTTP服务器应用程序的信息

Vary

可对缓存进行控制,源服务器会向代理服务器传达关于本地缓存使用方法的命令

WWW-Authenticate

告知客户端适用于访问请求URI所指定资源的认证方案和带参数提示的质询

实体首部字段

指令

作用

Allow

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

Content-Encoding

告知客户端服务器对实体的主体部分选用的内容编码方式

Content-Language

告知客户端实体主体使用的自然语言

Content-Length

实体主体部分的大小(单位是字节),对实体主体进行内容编码传输时,不能再使用Content-Length首部字段。

Content-Location

给出与报文主体部分相对应的URI

Content-MD5

检查报文主体在传输过程中是否保持完整的MD5值

Content-Range

告知客户端作为响应返回的实体的哪个部分符合范围请求

Content-Type

实体主体内对象的媒体类型

Expires

将资源失效的日期告知客户端

Last-Modified

指明资源最终修改的时间

Cookie相关

  • Set-Cookie:响应首部字段。告知开始管理cookie
    • expires:指定浏览器可发送Cookie的有效期
    • path:限制指定Cookie的发送范围的文件目录
    • domain:指定的域名可做到与结尾匹配一致
    • secure:限制Web页面仅在HTTPS安全连接时,才可以发送Cookie
    • HttpOnly:它使JavaScript脚本无法获得Cookie,防止脚本攻击
  • Cookie:请求首部字段。接收到的cookie信息

其他首部字段

  • X-Frame-Options:响应首部字段,用于控制网站内容在其他Web网站的Frame标签内的显示问题

    • DENY:拒绝
    • SAMEORIGIN:仅同源域名下的页面(Top-level-browsing-context)匹配时许可
  • X-XSS-Protection:响应首部字段,用于控制浏览器XSS防护机制的开关

    • 0 :将XSS过滤设置成无效状态
    • 1 :将XSS过滤设置成有效状态
  • DNT:请求首部字段,拒绝个人信息被收集

    • 0:同意被追踪
    • 1:拒绝被追踪
  • P3P:响应首部字段,让Web网站上的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的

第七章 确保Web安全的HTTPS

HTTP的缺点

  • 通信使用明文(不加密),内容可能会被窃听
    • TCP/IP是可能被窃听的网络。
      TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视,即使已经过加密处理的通信,也会被窥视到通信内容,只是说如果通信经过加密,就有可能让人无法破解报文信息的含义,但加密处理后的报文本身还是会被看到的。

    • 加密处理防止被窃听。

      • 通信加密
        HTTP协议中没有加密机制,但可以通过和SSLTLS的组合使用,加密HTTP的通信内容, HTTPS。
      • 内容加密
        HTTP协议传输的内容本身加密
  • 不验证通信方的身份,因此有可能遭遇伪装
    • HTTP协议不存在确认通信方的处理步骤,任何人都可以发起请求,服务器只要接收到请求,不管对方是谁都会返回一个响应
    • 证书。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定方
      证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的
      伪造证书从技术角度来说是异常困难的一件事
      减少了个人信息泄露的危险性
      客户端持有证书即可完成个人身份的确认,也可用于对Web网站的认证环节
  • 无法证明报文的完整性,所以有可能已遭篡改
    • 由于HTTP协议无法证明通信的报文完整性,没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的
    • MD5SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法,但依然无法百分百保证确认结果正确

HTTPS

我们把添加了加密及认证机制的HTTP称为HTTPS(HTTP Secure)

通常,HTTP直接和TCP通信。当使用SSL时,则变成先和SSL通信,再由SSLTCP通信了。所谓HTTPS,其实就是身披SSLHTTP

SSL采用公开密钥加密,近代的加密方法中加密算法是公开的,而密钥却是保密的。通过这种方式得以保持加密方法的安全性。

  • 对称加密:加密和解密同用一个密钥的方式称为共享密钥加密(Common key crypto system),也被叫做对称密钥加密。

  • 非对称加密:发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密

  • HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制,在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。

  • 证书:

    • 服务器的运营人员向数字证书认证机构提出公开密钥的申请,

    • 数字证书认证机构在判明提出申请者的身份之后,对已申请的公开密钥做数字签名,

    • 分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起,

    • 服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,

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

    • EV SSL证书:确认对方服务器背后运营的企业是否真实存在

    • 客户端证书:证明服务器正在通信的对方始终是预料之内的客户端

    • 自签名证书:独立构建的认证机构叫做自认证机构,由自认证机构颁发的“无用”证书也被戏称为自签名证书

  • HTTPS的安全通信机制

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

核对信息:

  • 密码:只有本人才会知道的字符串信息。
  • 动态令牌:仅限本人持有的设备内显示的一次性密码。
  • 数字证书:仅限本人(终端)持有的信息。
  • 生物认证:指纹和虹膜等本人的生理信息。
  • IC卡等:仅限本人持有的信息。

HTTP使用的认证方式:

  • BASIC认证(基本认证)——Web服务器与通信客户端之间进行的认证方式。

    1. 当请求的资源需要BASIC认证时,服务器会随状态码401

    2. 接收到状态码401的客户端为了通过BASIC认证,需要将用户ID及密码发送给服务器

    3. 接收到包含首部字段Authorization请求的服务器,会对认证信息的正确性进行验证

  • DIGEST认证(摘要认证)

    1. 请求需认证的资源时,服务器会随着状态码40,返回带WWW-Authenticate首部字段的响应

    2. 接收到401状态码的客户端,返回的响应中包含DIGEST认证必须的首部字段Authorization信息

    3. 接收到包含首部字段Authorization请求的服务器,会确认认证信息的正确性,认证通过后则返回包含Request-URI资源的响应。

  • SSL客户端认证 —— 借由HTTPS的客户端证书完成认证
    SSL客户端认证采用双因素认证。使用SSL客户端认证需要用到客户端证书。而客户端证书需要支付一定费用才能使用。

    双因素认证就是指,认证过程中不仅需要密码这一个因素,还需要申请认证者提供其他持有信息,从而作为另一个因素,与其组合使用的认证方式。

    1. 接收到需要认证资源的请求,服务器会发送Certificate Request报文,要求客户端提供客户端证书。
    2. 用户选择将发送的客户端证书后,客户端会把客户端证书信息以Client Certificate报文方式发送给服务器。
    3. 服务器验证客户端证书验证通过后方可领取证书内客户端的公开密钥,然后开始HTTPS加密通信。
  • FormBase认证(基于表单认证)
    基于表单认证的标准规范尚未有定论,一般会使用Cookie来管理Session

    1. 客户端把用户ID和密码等登录信息放入报文的实体部分,通常是以POST方法把请求发送给服务器
    2. 服务器会发放用以识别用户的SessionID。通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与Session ID绑定后记录在服务器端
    3. 客户端接收到从服务器端发来的SessionID后,会将其作为Cookie保存在本地。下次向服务器发送请求时,浏览器会自动发送Cookie,所以Session ID也随之发送到服务器。

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

HTTP的瓶颈
使用HTTP协议探知服务器上是否有内容更新,就必须频繁地从客户端到服务器端进行确认。如果服务器上没有内容更新,那么就会产生徒劳的通信。

  • 一条连接上只可发送一个请求。
  • 请求只能从客户端开始。客户端不可以接收除响应以外的指令。
  • 请求/响应首部未经压缩就发送。首部信息越多延迟越大。
  • 发送冗长的首部。每次互相发送相同的首部造成的浪费较多。
  • 可任意选择数据压缩格式。非强制压缩发送。

Ajax

通过JavaScript脚本语言的调用就能和服务器进行HTTP通信,从已加载完毕的Web页面上发起请求,只更新局部页面。

可能会导致大量请求产生,仍未解决HTTP协议本身存在的问题。

Comet

通过延迟应答,模拟实现服务器端向客户端推送。一旦服务器端有内容更新,Comet不会让请求等待,直接给客户端返回响应

为了保留响应,一次连接的持续时间变长了,为了维持连接会消耗更多的资源,仍未解决HTTP协议本身存在的问题。

SPDY

TCP/IP的应用层与传输层之间通过新加会话层的形式运作,以会话层的形式加入,控制对数据的流动,但还是采用HTTP建立通信连接

  • 多路复用流 —— 通过单一的TCP连接,可以无限制处理多个HTTP请求,提高处理效率
  • 赋予请求优先级 —— 发送多个请求时,解决因带宽低而导致响应变慢的问题
  • 压缩HTTP首部 —— 减少数据包数量和发送的字节数
  • 推送功能 —— 支持服务器主动向客户端推送数据的功能
  • 服务器提示功能 —— 服务器可以主动提示客户端请求所需的资源,避免发送不必要的请求

WebSocket

一旦Web服务器与客户端之间建立起WebSocket协议的通信连接,之后所有的通信都依靠这个专用协议进行

一旦确立WebSocket通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。

  • 推送功能 —— 持由服务器向客户端推送数据的推送功能
  • 减少通信量 —— 只要建立起WebSocket连接,就希望一直保持连接状态

HTTP/2.0

WebDAV

基于万维网的分布式创作和版本控制。是一个可对Web服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统

第十章 构建Web内容的技术

**超文本**:一种文档系统,可将文档中任意位置的信息与其他信息建立关联

**标记语言**:通过在文档的某部分穿插特别的字符串标签,用来修饰文档的语言

HTML:超文本标记语言

标签:出现在HTML文档中的特殊字符串

CSS:层叠样式表。以指定如何展现HTML内的各种元素,属于样式表标准之一

动态HTML:用客户端脚本语言将静态的HTML内容变成动态的技术的总称

Web英语:通过Web功能提供的应用程序

**CGI**:Web服务器在接受到客户端发送的过来的请求后转发给程序的一组机制

Servlet:用Java语言实现的接口,是一种能在服务器上创建动态内容的程序

**XML**:可扩展标记语言。是一种可按应用目标进行扩展的通用标记语言

JSON:是一种以JavaScript的对象表示法为基础的轻量级数据标记语言,能处理的数据类型false/null/true/对象/数组/数字/字符串

第十一章 Web的攻击技术

  • 针对Web的攻击技术

    • HTTP:不具备协议级别的认证及会话管理等功能,开发者需要自行设计并开发认证及会话管理功能来满足Web应用的安全
    • 在客户端即可篡改请求。
    • 针对Web应用的攻击模式
      • 主动攻击:通过直接访问Web应用,把攻击代码传入的攻击模式,具有代表性的攻击是SQL注入攻击和OS命令注入攻击
      • 被动攻击:利用圈套策略执行攻击代码的攻击模式
  • 因输出值转义不完全引发的安全漏洞

    • 跨站脚本攻击:通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击
      • 利用虚假输入表单骗取用户个人信息、用户cookie。
      • 显示伪造的文章或图片。
    • SQL注入攻击:针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击
      • 非法查看或篡改数据库内的数据
      • 规避认证
      • 执行和数据库服务器业务关联的程序
    • OS命令注入攻击:通过Web应用,执行非法的操作系统命令达到攻击的目的
    • HTTP首部注入攻击:通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击模式。
      • 向首部主体内添加内容的攻击称为HTTP响应截断攻击
      • 设置任何Cookie信息
      • 重定向至任意URL
      • 显示任意的主体(HTTP响应截断攻击)
    • 邮件首部注入攻击 :攻击者通过向邮件首部To或Subject内任意添加非法内容发起的攻击
    • 目录遍历攻击:对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击
    • 远程文件包含漏洞:当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击
  • 因设置或设计上的缺陷引发的安全漏洞

    • 强制浏览:从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件
      • 泄露顾客的个人信息等重要情报
      • 泄露原本需要具有访问权限的用户才可查阅的信息内容
      • 泄露未外连到外界的文件
    • 不正确的错误消息处理:Web应用的错误信息内包含对攻击者有用的信息
      • Web应用抛出的错误消息
      • 数据库等系统抛出的错误消息
        • PHP或ASP等脚本错误
        • 数据库或中间件的错误
        • Web服务器的错误
    • 开放重定向:假如指定的重定向URL到某个具有恶意的Web网站,那么用户就会被诱导至那个Web网站
  • 因会话管理疏忽引发的安全漏洞

    • 会话劫持:攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的
      • 通过非正规的生成方法推测会话ID
      • 通过窃听或XSS攻击盗取会话ID
      • 通过会话固定攻击(Session Fixation)强行获取会话ID
    • 会话固定攻击
    • 跨站点请求伪造:攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击
      • 利用已通过认证的用户权限更新设定信息等
      • 利用已通过认证的用户权限购买商品
      • 利用已通过认证的用户权限在留言板上发表言论
  • 其他安全漏洞

    • 密码破解
      • 通过网络的密码试错
        • 穷举法
        • 字典攻击:利用事先收集好的候选密码(经过各种组合方式后存入字典),枚举字典中的密码,尝试通过认证的一种攻击手法
      • 对已加密密码的破解
        • 通过穷举法·字典攻击进行类推
        • 彩虹表
        • 拿到密钥
        • 加密算法的漏洞:
    • 点击劫持:利用透明的按钮或链接做成陷阱,覆盖在Web页面之上。然后诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段
    • DoS攻击:让运行中的服务呈停止状态的攻击
      • 集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态
      • 通过攻击安全漏洞使服务停止
    • 后门程序:开发设置的隐藏入口,可不按正常步骤使用受限功能。利用后门程序就能够使用原本受限制的功能
      • 开发阶段作为Debug调用的后门程序
      • 开发者为了自身利益植入的后门程序
      • 攻击者通过某种方法设置的后门程序
[](https://confluence.zhenguanyu.com/pages/viewpage.action?pageId=81435677)