第1章 了解Web及网络基础
1.1 使用HTTP协议访问Web
HTTP: HyperText Transfer Protocal,超文本传输协议/超文本转移协议。Web是建立在HTTP协议上通信的。
1.2 HTTP的诞生
HTTP于1990年问世,那时候HTTP并没有作为正式的标准被建立,被称为HTTP/0.9
HTTP正式作为标准被公布是在1996年5月,版本被命名为HTTP/1.0,该协议至今仍被广泛用在服务器端。
HTTP/1.1于1997年1月公布,是目前主流的HTTP协议版本。
HTTP/2.0正在制定中。
1.3 网络基础 TCP/IP
通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的。而HTTP属于它内部的一个子集。我们可以把TCP/IP看成是互联网相关协议的总称。
TCP/IP协议族按层次分别为以下4层:
应用层:决定了向用户提供应用服务时的通信活动,该层包括FTP、DNS、HTTP。
传输层:对上层应用层,提供处于网络连接中的两台计算机之间的数据传输,该层包括TCP、UDP。
网络层:用来处理在网络上流动的数据包,该层规定了通过怎样的路径达到对方计算机并把数据包传送给对方。
数据链路层:用来处理连接网络的硬件部分,如:网卡、光纤。
TCP/IP通信传输流(http举例)
(客户端)HTTP客户端-->TCP-->IP-->网络 --|--网络-->IP-->TCP-->HTTP服务器(服务器)
发送端每通过一层则增加首部(header),接收端每通过一层则删除首部。这种方法称为封装。
1.4 与HTTP关系密切的协议:IP、TCP和DNS
负责传输的 IP 协议
在进行中转时,会利用下一站中转设备的 MAC 地址来搜索下一个中转目标。这时,会采用 ARP 协议。ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址。
确保可靠性的 TCP 协议
为了准确无误地将数据送达目标处,TCP 协议采用了三次握手策略。
1.5 负责域名解析的DNS服务
DNS服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。
1.6 各种协议与 HTTP 协议的关系
按流程顺序分别为:
DNS服务:把用户输入的域名解析为IP地址
HTTP协议:生成针对目标web服务器的HTTP请求报文
TCP协议:为了方便通信将HTTP请求报文分割成报文段,把每个报文段可靠的传给对方
IP协议:搜索对方的地址,一边中转一边传送
TCP协议:从对方那里接收报文段并按序号从组请求报文
HTTP协议:对web服务器请求的内容的处理
1.7 URI 和 URL
URI 用字符串标识某一互联网资源,而 URL 表示资源的地点(互联网上所处的位置)。URL 是 URI 的子集。
区别就是 URI 定义资源,而 URL 不单定义这个资源,还定义了如何找到这个资源(既访问资源的方式)。
第2章 简单的http协议
2.1 HTTP协议用于客户端和服务器端之间的通信
2.2 通过请求和响应的交换达成通信
请求报文是由请求方法、请求URI、协议版本、可选的请求头部字段和内容实体构成的。
响应报文基本上是由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段及实体主体构成。
2.3 HTTP是不保存状态的协议
HTTP协议自身不对请求和响应之间的通信状态进行保存。
2.4 请求URI定位资源
HTTP协议使用URI定位互联网上的资源。
2.5 告知服务器意图的http方法
方法 | 说明 |
---|---|
GET | 获取资源 |
POST | 传输实体主体 |
PUT | 传输文件 |
HEAD | 获得报文首部 |
DELETE | 删除文件 |
OPTIONS | 询问支持的方法 |
TRACE | 追踪路径 |
CONNECT | 要求用隧道协议连接代理 |
LINK | 建立和资源之间的联系 |
UNLINK | 断开连接关系 |
2.6 使用方法下达命令
向请求URI指定的资源发送请求报文时,采用成为方法的命令。
2.7 持久连接节省通信量
持久连接的好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻服务器端荷载。在HTTP/1.1中所有连接默认都是持久连接。持久连接使得多数请求以管线化方式发送,即能同时并行发送多个请求。
2.8 使用Cookie的状态管理
Ccookie技术是通过在请求和响应报文中写入cookie信息来控制客户端的状态。Cookie会根据从服务器发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端接收到客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
第3章 HTTP报文内的HTTP信息
3.1 HTTP报文
HTTP报文大致可分为报文首部和报文主体两块,两者有最初出现的空行来划分,通常并不一定要有报文主体。
3.2 请求报文和响应报文的结构
请求行:包含用于请求的方法,请求URI和HTTP版本
状态行:包含响应结果的状态码,原因短语和HTTP版本
首部字段:包含表示请求和响应的各种条件和属性的各类首部,一般分别为:通用首部、请求首部、响应首部和实体首部。
其他:包含HTTP的RFC里未定义的首部(Cookie等)
3.3 编码提升传输速率
常用的内容编码方式有以下几种:
gzip(GNU zip)
compress(UNIX系统的标准压缩)
deflate(zlib)
identity(不进行编码)
3.4 发送多种数据的多部分对象集合
HTTP协议中也采纳了多部分对象集合,发送的一份报文主体内可含有多类型实体。多部分对象集合的每个部分类型中,都可以含有首部字段。
3.5 获取部分内容的范围请求(Range Request)
执行范围请求时,会用到首部字段Range来指定资源的byte范围。针对范围请求,响应会返回状态码为206 Partial Content的响应报文。
3.6 内容协商返回最合适的内容
内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。如首部字段中的Accept、Accept-Charset、Accept-Enoding、Accept-Language、Content-Language。
第4章 返回结果的HTTP状态码
状态码 | 类别 | 含义 |
---|---|---|
1XX | informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作已完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器端错误状态码) | 服务器处理请求出错 |
2XX | 成功 | |
200 | OK | 表示从客户端发来的请求在服务器端被正常处理 |
204 | No Content | 表示服务器接收的请求已成功处理,但返回的响应报文中不允许返回任何实体的主体部分 |
206 | Partial Content | 表示客户端进行了范围请求,服务器成功执行了这部分GET请求 |
3XX | 重定向 | |
304 | Not Modified | 表示客户端发送附带条件的GET请求时,其访问的资源(自上次访问以来或者根据请求的条件)未变化 |
4XX | 客户端错误 | |
401 | Bad Request | 表示报文中存在语法错误 |
403 | Forbidden | 表示对请求资源的访问被服务器拒绝了 |
404 | Not Found | 表示服务器上无法找到请求的资源 |
5XX | 服务器错误 | |
501 | Internet Sever Error | 表示服务器端在执行请求时发生了错误 |
503 | Service Unavailable | 表示服务器暂时处于超负荷或正在停机维护,现无法处理请求 |
第5章 与http协作的web服务器
5.1 用单个虚拟主机实现多个域名
HTTP / 1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点。这是利用虚拟主机的功能。
在互联网上,域名通过 DNS 服务映射到 IP 地址之后访问目标网站。可见,当请求发送到服务器时,已经是以 IP 地址形式访问了。所以,当一台托管了两个域名的服务器接收到请求时就需要弄清楚究竟要访问哪个域名。
在相同的 IP 地址下,由于虚拟主机可以寄存多个不同主机名和域名的 Web 网站,因此在发送 HTTP 请求时,必须在 Host 首部内完整指定主机名或域名的 URI。
5.2 通信数据转发程序:代理、网关、隧道
代理
代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。代理服务器的基本行为接收客户端发送的请求后转发给其他服务器,代理不改变请求URI,转发时需要附加Via首部字段已标记出经过的主机信息。
使用代理服务器的理由:利用缓存技术(代理缓存)减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的。
代理有多种使用方法,按两种基准分类。一种是是否使用缓存,另一种是是否会修改报文:
缓存代理:代理转发响应时,缓存代理会预先将资源的副本(缓存)保存在代理服务器上
透明代理:转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理。反之,对 报文内容进行加工的代理被成为非透明代理。
网关
网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。
网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非 HTTP 协议服务。
隧道
隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。
隧道本身不会去解析 HTTP 请求。请求保持原样中转给之后的服务器。隧道会在通信双方断开连接时结束。
5.3 保存资源的缓存
缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,节省通信流量和时间。
缓存服务器是代理服务器的一种。当代理转发从服务器返回的响应时,代理服务器将会保存一份资源的副本。
缓存服务器的优势在于利用缓存可避免多次从源服务器转发资源。因此客户端可就近从缓存服务器上获取资源,而源服务器也不必多次处理相同的请求了。
缓存的有效期限
对于缓存服务器和客户端浏览器,当判定缓存过期或客户端要求,会向源服务器确认资源的有效性。若失效,浏览器会再次请求新资源。
客户端的缓存
缓存不仅可以存在于缓存服务器内,还可以存在客户端浏览器中。以 Internet Explorer 程序为例,把客户端缓存称为临时网络文件。
第6章 HTTP首部
6.2 HTTP 首部字段
使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
4种HTTP首部字段类型
通用首部字段、请求首部字段、响应首部字段、实体首部字段。
第 7 章 确保 Web 安全的 HTTPS
7.1 HTTP 的缺点
通信使用明文(不加密),内容可能会被窃听
不验证通信方的身份,因此有可能遭遇伪装
无法证明报文的完整性,所以有可能已遭篡改
7.2 HTTP + 加密 + 认证 + 完整性保护 = HTTPS
HTTPS是身披SSL外壳的HTTP。通常,HTTP直接和TCP通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简言之,所谓 HTTPS,其实就是身披SSL协议这层外壳的HTTP。
在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。SSL是独立于HTTP的协议,所以不光是 HTTP 协议,其他运行在应用层的 SMTP 和Telnet等协议均可配合 SSL协议使用。可以说SSL是当今世界上应用最为广泛的网络安全技术。
SSL 采用一种叫做公开密钥加密的加密处理方式。HTTPS 采用混合加密机制。
第8章 确认访问用户身份的认证
计算机本身无法判定坐在显示器前的使用者的身份。进一步说,也无法确认网络的那头究竟有谁。为了确认是否真的具有访问系统的权限,需要核对信息:
密码:只有本人才会知道的字符串信息。
动态令牌:仅限本人持有的设备内显示的一次性密码。
数字证书:仅限本人(终端)持有的信息。
生物认证:指纹和虹膜等本人的生理信息。
IC卡等:仅限本人持有的信息。
HTTP/1.1使用的认证方式:
BASIC认证
DIGEST认证(摘要认证)
SSL客户端认证
FormBase认证(基于表单认证)
基于表单认证
Session管理及Cookie状态管理:
步骤1:客户端把用户ID和密码等登录信息放入报文的实体部分,通常是以POST方法把请求发送给服务器。而这时,会使用HTTPS通信来进行HTML表单画面和用户输入数据的发送。
步骤2:服务器会发放用以识别用户的Session ID。通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与Session ID绑定后记录在服务器端。
步骤3:客户端接收到从服务器端发来的Session ID后,会将其作为Cookie保存在本地。下次向服务器发送请求时,浏览器会自动发送Cookie,所以Session ID也随之发送到服务器。服务器端可以通过验证接收到的Session ID识别用户和其认证状态。
第9章 基于HTTP的功能追加协议
9.2 消除HTTP瓶颈的SPDY
HTTP的瓶颈:
使用HTTP协议探知服务器内容是否更新,就需要频繁的从客户端到服务器端进行确认,如果服务器上没有内容更新,此时就会产生徒劳的通信。主要的缺点有:
一条连接上只能发送一个请求
请求只能从客户端开始。客户端不可以接收除响应意外的命令。
请求/响应首部未经压缩就发送。首部信息越多延时越大。
发送冗长的首部。每次相互发送相同首部造成的浪费较多。
可任意选择数据压缩格式。非强制压缩发送。
SPDY的设计与功能
SPDY没有完全改写HTTP协议,而是在TCP/IP之间应用层和传输层之间通过新加入会话的形式运作,同时考虑安全性问题,SPDY规定通信中使用SSL。
SPDY会以会话层加入,控制对数据的流动,但是还是采用HTTP建立通信连接。因此可照常使用HTTP的GET和PSOT等方法、Cookie以及HTTP报文等。
9.3使用浏览器进行全双工通信的WebSocket
websocket与web浏览器与web服务器之间全双工通信标准。一旦web浏览器和web服务器之间建立这种联系,之后所有的通信都依靠这个专用的协议进行。通信过程中可以相互发送JSON、XML、HTML或者图片等任意格式的数据。
第10章 构建web内容的技术
10.1 HTML
为了发送Web上的超文本而开发的标记语言。超文本是一种文档系统,可将文档中任意位置的信息与其他信息建立关联,即超链接文本。标记语言是指通过在文档的某部分穿插特别的字符串标签,用来修饰文档的语言。我们把出现在HTML文档内的这种特殊字符串叫做HTML标签(tag)
10.2 动态HTML
指使用客户端脚本语言将静态的HTML内容变成动态的技术的总称。动态HTML是通过调用客户端脚本javascript,实现对HTML的web页面的动态改造。利用DOM可指定欲发生动态变化的HTML元素。
10.3 Web应用
指通过web功能提供的应用程序,如购物网站、搜索引擎等。其中由程序创建的内容称之为动态内容,而事先准备好的内容称之为静态内容。web内容则作用于动态内容之上。
10.4数据发布格式及语言
XML(extensible Markup Language,可扩展标记语言)是一种可按应用目标进行扩展的通用标记语言。旨在通过使用xml,使得互联网数据共享变得容易。XML和HTML都是从标准通用标记语言SGML简化而成
RSS(简易信息聚合)和Atom都是发布新闻博客日志等更新信息文档格式的总称。两者都用到了XML
JSON是一种以javascript的对象表示法为基础的轻量级数据标记语言,能够处理的数据类型有false/null/true/对象/数组/数字/字符串,这7种类型。
第11章 Web的攻击技术
11.1针对Web的攻击技术
在客户端即可篡改请求
在WEB应用中从浏览器接收到的HTTP请求的全部内容都可以在客户端自由的变更、篡改。因此web引用可能接收到与预期数据不相同的内容;在HTTP请求报文内加载攻击代码就能对web应用发起对web应用的攻击。
攻击模式分类
主动攻击(active attack)主要是攻击者通过直接访问web应用把攻击代码传入的攻击模式。由于该模式是针对服务器上的资源进行攻击,因此攻击者需要能够访问那些资源,主动攻击模式中具有代表性的有SQL注入攻击和OS命令注入攻击。
被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标web应用访问发起攻击。
11.2因输出值转移不完全引发安全漏洞
实施web应用对策大致可以分为以下两种:客户端验证、web应用端(服务器端)的验证。
跨站脚本攻击
跨站脚本攻击(XSS)是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JavaScript进行的一种攻击。动态创建的HTML部分可能有隐藏的漏洞,这样攻击者编写脚本陷阱,用户在自己浏览器上运行时,一不小心就会受到被动攻击。
对用户Cookie的窃取攻击
通过js脚本窃取Cookie信息
SQL注入攻击
SQL注入是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。该安全隐患可能会导致个人信息及机密信息的泄露。由于We应用通常会使用到数据库,如果在调用数据库语句方式存在疏漏,就有可能被执行恶意注入。
OS命令注入攻击
OS命令注释系统是指通过web应用执行非法的操作系统命令达到攻击的目的。可以从wen应用中通过shell来调用操作系统命令,倘若调用shell时存在疏漏就可以执行插入的非法OS命令,通过os注入攻击可以执行os上安装着的各种程序。
HTTP首部注入攻击
HTTP首部注入攻击是指攻击者通过响应首部字段内插入换行,添加任意响应首部或主体的一种攻击,属于被动式攻击。向首部主体添加内容的攻击方式称为HTTP响应截断攻击
HTTP响应截断攻击
HTTP响应截断攻击是HTTP首部注入攻击的一种,攻击顺序相同但是要将%0D%0A%0D%0A并排插入字符串后发送,利用这两个连续换行就可以做出HTTTP首部与主体分割所需的空行了,这样就能显示伪造的主体,达到攻击的目的。这样的攻击称作HTTP响应截断攻击。
邮件首部注入攻击
是指web应用中的邮件发送功能。攻击者通过向邮件首部To或者Subject内任意添加非法内容发起的攻击。
目录遍历攻击
对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击方式。这种攻击又称路径遍历攻击
远程文件包含漏洞
指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取后,就可以运行任意脚本的一种攻击方式。(主要是PHP存在的安全漏洞)
11.3因设置上或设计缺陷引发的安全漏洞
主要是错误设置web服务器或者是由设计上的一些问题引起的安全漏洞。主要包括下面3个方面
强制浏览
强制浏览安全漏洞是指,从安置在web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。强制浏览可以造成诸如泄露顾客的个人信息等重要情报、泄露原本需要具有访问权限的用户才可以查阅的信息内容、泄露未连接到外界的文件
不正确的错误消息处理
指web应用的错误小心包含对攻击者有用的信息,包括Web应用抛出的错误消息、数据库等系统抛出的错误消息
开放重定向
指对任意URL作重定向跳转的功能。
11.4 因会话管理疏忽引发的安全漏洞
会话管理是用来管理用户状态的必备功能,但是如果在会话管理上有所疏忽,就会导致用户的认证状态被窃取等后果。
会话劫持
通过某种非法手段获得用户的ID,并非法使用此会话ID伪装成用户,达到攻击的目的。
会话固定攻击
对以窃取目标会话ID为主动攻击手段劫持而言,会话固定攻击(Session Fixation)攻击会强制用户使用攻击者指定的会话ID,属于被动攻击
跨站点请求伪造
指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或者设定信息等某些状态更新,属于被动攻击
11.5其他安全漏洞
密码破解攻击
点击劫持:指利用透明按钮或者链接做成陷阱,覆盖在Web页面之上,又称页面伪装。
dos攻击:是一种让运行中的服务呈现停止状态的攻击,又称服务器停止攻击或拒绝服务攻击。Dos攻击对象不仅限于Web网站还包括网络设备及服务器。主要有两种方式DoS:集中利用访问请求造成资源过载,资源用尽的同时实际服务也就呈现停止状态;通过攻击安全漏洞使服务停止。
后门程序:指开发设置的隐藏入口。