作者:【日】上野 宣
译者:于均良
阅读时间:2016-01-07~2016-01-17
1、了解Web及网络基础
- HTTP通常被译成超文本传输协议,但它实际上是应用层的协议而不是传输层的协议
参考:OSI七层与TCP/IP五层网络架构详解 - 使用ARP协议凭借MAC地址进行通信。
ARP协议(Address Resolution Protocol),地址解析协议,可以根据IP地址反查出对应的MAC地址。
2、简单的HTTP协议
- HTTP是无状态协议,即协议对于发送过的请求或响应都不做持久化处理。但为了实现期望的保持状态功能,于是引入了Cookie技术。
- HTTP中可使用的方法:
(1)GET:获取资源
(2)POST:传输实体
(3)PUT:传输文件。PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,因此一般的Web网站不使用该方法。若配合Web应用程序的验证机制或架构设计采用REST(表征状态转移)标准的同类Web网站,就可能会开放使用PUT方法。
(4)HEAD:获得报文首部
(5)DELETE:删除文件。特点同PUT方法。
(6)OPTIONS:询问支持的方法。服务器不一定支持所有HTTP协议的方法,所以可以通过OPTIONS请求查看服务器支持的HTTP方法有哪些。
(7)TRACE:追踪路径。用来确认连接过程中发生的一系列操作,但该方法易引起XST(跨站追踪)攻击,通常是不会用到的。
(8)CONNECT:要求用隧道协议连接代理。
最常用的就是GET和POST啦,其实就连GET都很少用的。
参考:
浅谈HTTP中Get与Post的区别
不再以讹传讹,GET和POST的真正区别 - 持久连接
持久连接旨在建立1次TCP连接后进行多次请求和响应的交互,减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。 - 管线化
持久化连接使得多数请求以管线化方式发送成为可能。这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。 - 使用Cookie的状态管理
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
3、HTTP报文的HTTP信息
- 发送多种数据的多部分对象集合
HTTP协议中发送的一份报文主体内可含有多类型实体。通常是在图片或文本文件等上传时使用。
在HTTP报文中使用多部分对象集合时,需要在首部字段里加上Content-type。 - 内容协商
内容协商以响应资源的语言、字符集、编码方式等作为判断的基准。
内容协商技术有一下三种类型:
(1)服务器驱动协商
(2)客户端驱动协商
(3)透明协商
4、返回结果的HTTP状态码
200 请求已正常处理
204 请求资源成功,但没有资源可返回
206 部分资源的请求
301 资源的URI已更新,你也更新下你的书签引用吧
302 资源的URI已临时定位到其他位置了,姑且算你已经知道这个情况了
303 资源的URI已更新,你是否能临时按新的URI访问
当301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文的主体,之后请求会自动再次发送。而301、302标准是禁止将POST方法改变成GET方法的,可实际使用时大家都会这么做。
304 资源已找到,但未符合条件请求......304虽然被划分在3XX类别中,但是和重定向没有关系。
307 临时重定向,和302有着相同的含义,307会遵照标准,不会从POST变成GET。
400 服务器无法理解这个请求
401 需要认证的请求,且认证失败时,返回该状态码
403 服务器拒绝该请求,可能是客户端未获得文件系统的访问授权,也可能是访问权限出现了某些问题。
404 服务器上没有访问的资源
500 服务器端在执行请求时发生了错误。
503 服务器暂时处于超负载或正在进行停机维修,现在无法处理请求
5、与HTTP协作的Web服务器
- 代理
代理分缓存代理和透明代理。缓存代理会预先将资源的副本(缓存)保存在代理服务器上,当代理再次接收到对相同资源的请求时,就可以不从源服务器那里获取资源,而是将之前缓存的资源作为响应返回。 - 网关
利用网关可以由HTTP请求转化为其他协议通信。 - 隧道
隧道的目的是确保客户端能与服务器进行安全的通信。
6、HTTP首部
- 通用首部字段Cache-Control的no-cache指令和no-store指令:no-cache表示不要缓存过的资源,要源服务器的资源;no-store表示缓存服务器不能缓存请求或响应的任何内容。
- 通用首部字段Connection的作用:控制不再转发给代理的首部字段;管理持久连接。HTTP/1.1之前的HTTP版本默认都是非持久连接。所以,如果想在旧版本的HTTP协议上维持持久连接,需指定Connection的值为keep-alive.
7、确保Web安全的HTTPS
HTTP的缺点:(1)通信使用明文(不加密),内容可能会被窃听;(2)不验证通信方的身份,因此有可能遭遇伪装;(3)无法证明报文的完整性,所以有可能已遭篡改
TCP/IP是可能被窃听的网络,可以通过加密处理来防止被窃听,加密处理的方式有两种:一、通信的加密;二、内容的加密。HTTP协议本身没有加密机制,但是可以通过和SSL(Secure Socket Layer安全套接层)或者TLS(Transport Layer Security 安全层传输协议)的组合使用,对通信进行加密。与SSL组合使用的HTTP被称为HTTPS或者HTTP over SSL。
SSL是独立于HTTP的协议,所以不光是HTTP,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。可以说SSL是当今世界上应用最为广泛的网络安全技术。
HTTPS采用混合加密机制:①用公开秘钥加密方式安全的交换在稍后的共享秘钥中药使用的秘钥;②确保交换的秘钥是安全的前提下,使用共享秘钥加密方式进行通信。
证书的作用有二:一是用来证明通信一方的服务器是否规范;二是用来确认对方服务器背后的企业是否真实存在。EV SSL证书是基于国际标准的认证知道方针颁布的证书。持有EV SSL证书的Web网站的浏览器地址栏处的背景色是绿色的。
8、确认访问用户身份的认证
- BASIC认证
- DIGEST认证
- SSL客户端认证
- 基于表单认证
9、基于HTTP的功能追加协议
Ajax的解决方法:Ajax(异步JavaScript与XML)是一种有效利用JavaScript和DOM的操作,以达到局部Web页面替换加载的异步通信手段。Ajax的核心技术是名为XMLHttpRequest的API。
Comet的解决方法:通常,服务器端接收到请求,处理完毕后立即返回响应,但为了实现推送功能,Comet会先将响应置于挂起状态,服务器端一旦有更新,就立即反馈给客户端。
Ajax和Comet等提高易用性的技术一定程度上使HTTP得到了改善。但HTTP协议本身的限制也令人束手无策,为了进行根本性的改善,需要有一些协议层面上的改动,于是出现了SPDY
- 消除HTTP瓶颈的SPDY
SPDY以会话层的形式加入,介于TCP(SSL)和HTTP之间。使用SPDY之后,HTTP协议额外获得如下功能:
多路复用流:单一的TCP连接,可以无限处理多个HTTP请求。
赋予请求优先级:这样主要是为了在发送多个请求时,解决因带宽低而导致响应变慢的问题。
压缩HTTP首部:这样一来,通信时的流量就变少了。
推送功能:服务器可直接发送请求而不必等待客户端的请求。
服务器提示功能:可以避免发送不必要的请求。
SPDY基本上只是将单个域名的通信多路复用,所以当一个Web网站上使用了多个域名下的资源,改善效果就会受到限制。 - 使用浏览器进行全双工通信的WebSocket
10、构建Web内容的技术
CGI:通用网关接口,指Web服务器在接收到客户端发送过来的请求后转发给程序的一组机制。
11、Web的攻击技术
- 以服务器为目标的主动攻击
主动攻击模式里具有代表性的攻击是SQL注入和OS命令注入
+以服务器为目标的被动攻击
被动攻击是指利用圈套策略执行攻击代码的攻击模式。被动攻击模式中具有代表性的攻击是跨站脚本攻击和跨站点请求伪造。 - HTTP首部注入攻击
- HTTP响应截断攻击
- 邮件首部注入攻击
- 目录遍历攻击(路径遍历攻击)
- DoS攻击:集中利用访问请求造成资源过载,资源用尽时,实际上服务也就呈停止状态;通过攻击安全漏洞使服务停止