1 了解Web及网络基础
1.1 HTTP/1.0
HTTP正式作为标准被公布实在1996年五月,版本命名为HTTP/1.0,记载于RFC1945.至今仍广泛使用在服务器端.
RFC1945 – Hypertext Transfer Protocol – HTTP/1.0
1.2 HTTP/1.1
1997年1月发布的HTTP/1.1是目前主流的HTTP协议版本.最新修订版为RFC2016
RFC2616 – Hypertext Transfer Protocol – HTTP/1.1
1.3 TCP/IP协议族
应用层: 定义了应用进程之间的通信和交互规则(提供端对端间的通信)
传输层: 提供处于网络连接中的两台计算机之间的数据传输
网络层: 负责为分组交换网上的不同主机提供通信业务。将运输层报文或用户数据报封装成分组和包进行发送。(为计算机通信寻找传输路线)
数据链路层: 将网络层交下来的 IP 数据报组装成帧,在两个相邻结点间的链路上传送帧。每一帧包括数据和必要的控制信息。
1.4 DNS(Domain Name System)服务是和HTTP协议一样位于医用曾的协议.它提供域名到I地址之间的解析服务.
1.5 URI 和 URL
URI,统一资源标识符是Uniform Resource Identifier的缩写.RFC2396分别对这3个单词进行了如下定义.
Uniform: 规定统一的格式方便处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式.
Resource: 资源的定义是”可标识的任何东西”.
Identifier: 表示可标示的对象.也称为标识符.
URL的语法:
<scheme:>//<user>:<password>@<host>:<port>/<path>;<params>?<query>#<fragment>
scheme 获取资源使用的协议方案.如http,ftp,telnet等
user:password 用户名与密码,一个特殊的存在,一半访问ftp会用到.表示访问资源的用户名与密码
host 主机,访问那台主机,可以使ip也可以是主机的域名
port 服务器端口,访问主机时的端口,http协议省略端口,默认使用80端口.
path 带层次的文件路径,一个主机上资源很多,通过path来定位特指的资源.
params 很少见,主要向服务器提供额外的参数, 用来表示本次请求的一些特性。
query 查询字符串,请求参数,如 www.baidu.com/login?id=123456
fragment 片段标识符,如果资源过长,可以获取资源中的子资源(文档中的某个位置).
2 简单的HTTP协议
2.1 请求访问文本或图像等资源的一端称为客户端,提供资源响应的一端称为服务器端
2.2 HTTP是一种不保存状态,即无状态(stateless)协议.HTTP协议自身不对请求和相应之间的通信状态进行保存.
2.3 HTTP方法
GET: 获取资源,请求访问已被URI识别的资源.
POST: 传输实体的主体
PUT: 传输文件
HEAD: 获得报文首部,HEAD方法和GET方法一样,只是不返回报文主体部分.用于确认URI的有效性及资源更新的日期时间.
DELETE: 用来删除文件,和PUT方法一样不带验证机制,存在安全问题.
OPTIONS:用来查询针对请求URI指定的资源支持的方法
TRACE: 追踪路径, 不经常使用
CONNECT: 要求在与代理服务器通信时建立隧道
2.4 持久连接
为了解决HTTP每次通信都要断开TCP连接的问题.HTTP/1.1和一部分的HTTP/1.0想出了持久连接(HTTP Persistent Connections,也称为HTTP keep-alive 或 HTTP connection reuse)的方法.只要任意一段没有明确断开连接,则保持TCP连接状态.
2.5 Cookie
客户端第一次发送请求报文没有Cookie信息,服务器端收到后在响应报文中生成Set-Cookie的首部字段信息发送给客户端,客户端收到后保存Cookie信息,再次发送请求报文时,在请求头首部字段添加Cookie字段.
3 HTTP报文内的HTTP信息
3.1 CR+LF
CR(Carriage Return,回车符: 16进制 0x0d)
LF(Line Feed,换行符 16进制 0x0a)
3.2 获取部分内容的范围请求
获取资源的一部分内容,指定范围的发送的请求就叫做范围请求(Range Request).执行范围请求时,会用到首部字段Range来指定资源的byte范围.
例如: Range: bytes=5001-10000
针对范围请求,相应会返回状态码为206Partial Content的相应报文.如果服务器无法相应范围请求,则会返回状态码200 OK和完整的实体内容.
3.3 内容协商
内容协商机制是指客户端和服务器端就相应的资源内容进行交涉,然后提供给客户端最为适合的资源.
4 返回结果的HTTP状态码
4.1 状态码描述HTTP请求的处理结果,是正确还是出现错误.状态码由三位数字和原因短语组成.数字中第一位指定了相应类别,后两位没有分类.
4.2 2XX成功
200 OK 表示从客户端发来的请求在服务器端被正常处理
204 No Content 表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分.
206 Partial Content 表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求.响应报文中包含由Content-Range指定范围的实体内容.
4.3 3XX重定向
301 Moved Permanently 永久性重定向.表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI.
302 Found 临时性重定向.
303 See Other 表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源.303状态码明确表示客户端应当采用GET方法获取资源.
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源.
307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向
4.4 4XX 客户端错误
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求.比如没有获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源IP地址试图访问)
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
4.5 5XX 服务器端错误
500 Internal Server Error 服务器内部错误,无法完成请求.
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理
4.6 状态码和状况的不一致,不少返回的状态码响应都是错误的,但是用户可能察觉不到这点.比如Web应用程序内部发生错误,状态码依然返回200OK.
5 与HTTP协作的Web服务器
5.1 HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点.利用了虚拟主机(virtual Host,又称为虚拟服务器)的功能.
5.2 代理 是一种由转发功能的应用程序,它扮演了位于服务器和客户端”中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端.
每次通过代理服务器转发请求或响应时,会追加Via首部信息
透明代理:转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理(Transparent Proxy)
5.3 缓存 缓存是指代理服务器或客户端本地磁盘内保存的资源副本.利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间.缓存还可以存在于客户端浏览器中.
6 HTTP首部
6.1 HTTP首部字段结构
HTTP首部字段是由首部字段名和字段值构成的,中间用冒号”:”分隔.
首部字段名: 字段值
6.2 HTTP/1.1 通用首部字段 请求报文和响应报文都会使用的首部.
Cache-Control 操作缓存的工作机制,控制缓存的行为.
Public 浏览器和缓存服务器都可以缓存页面信息
Private 缓存服务器会对该特定用户提供资源缓存的服务,其他不会返回缓存.
no-cache 浏览器和缓存服务器都不应该缓存页面信息
no-store 请求和响应的信息都不应该被存储在对方的磁盘系统中,no-store才是真正的不进行缓存.
max-age=604800 (单位: 秒) 当客户端发送的请求中包含max-age,查看缓存资源的缓存时间是否小于max-age指定的时间,小于就接收缓存的资源.当max-age为0时,缓存服务器将请求转发给源服务器.服务器返回的响应中包含max-age表示保存缓存的最长时间.
HTTP/1.1版本的缓存服务器遇到同事存在Expires首部字段时,优先处理max-age字段.
min-fresh 要求缓存服务器返回至少还未过指定时间的缓存资源.
must-revalidate 代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效.
no-transform 无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型.这样可以防止缓存或代理压缩图片等类似操作
Connection
作用:控制不再转发给代理的首部字段,管理持久连接.
HTTP/1.1版本的默认连接都是持久连接.当服务器端想断开连接,则使用
Connection :close 断开连接
Date 表明创建HTTP报文的日期和时间
Pragma 是HTTP/1.1之前的版本的历史遗留字段,仅作为与HTTP/1.0的向后兼容而定义.
规范定义的形式唯一 Pragma: no-cache,只用在客户端发送的请求中.
Via 使用首部字段Via是为了追踪客户端与服务器之间的请求和响应报文的传输路径.报文经过代理或网关是,会在首部字段Via中附加该服务器的信息,然后再进行转发.
6.3请求首部字段 HTTP请求报文中使用的首部字段
Accept 用户代理能够处理的媒体类型及媒体类型的相对优先级.可使用type/subtype这种形式,一次指定多种媒体类型.
文本文件text/html,text/plain,text/css
图片文件 image/jpeg,image/gif,iamge/png
视频文件 video/mpeg,video/quicktime
使用q=来表示权重值,用分号进行分隔.q的取值范围为0~1默认权重值为1.
Accept-Charset 通知服务器用户代理支持的字符集及字符集的相对优先顺序.
Accept-Encoding 告知服务器用户代理支持的内容编码及内容编码的优先级顺序.
其中identity 不会执行压缩或不会变化的默认编码格式
Accept-Language 告知服务器用户代理能够处理的自然语言集,以及自然语言集的相对优先级.
From 告知服务器使用用户代理的用户的电子邮件地址.
Host 虚拟主机运行在同一个IP上,用首部字段Host区分.告知服务器请求的资源所处的互联网主机名和端口号.Host首部字段在HTTP/1.1规范内是唯一一个必须被包含在请求内的首部字段.
If-Modified-Since 如果在指定的日期时间后,资源发生了更新,服务器会接收请求.
Referer 告知服务器请求的原始资源的URI.
User-Agent 用于传达浏览器的种类
6.4响应首部字段
Accept-Ranges 告知客户端服务器是否能处理范围请求.可处理范围请求时指定为bytes,反之指定为none.
Etag 能告知客户端实体标记.它是一种可将资源以字符串形式做唯一性表示的方式.服务器会为每份资源分配对应的Etag值.如果资源更新,资源的URI虽然不变,但是ETag值会改变
若在下载过程中出现连接中断,在连接的情况,都会依照ETag值来指定资源.
Retry-After 告知客户端应该在多久以后再次发送请求.主要配合503 Service Unavailable 响应,或3XX Redirect响应一起使用.
Server 告知客户端当前服务器上安装的HTTP服务器应用程序的信息.
6.5 实体首部字段
Allow 能够支持Request-URI指定资源的所有HTTP方法.
Content-Encoding 对实体的主体部分选用的内容编码方式.内容编码是指在不丢失实体信息的前提下进行的压缩.
Content-Length 表名实体主体部分的大小(单位是字节)
Content-Type 说明了实体主体内对象的媒体类型.
Last-Modified 资源最终修改的时间
6.6 Cookie
Cookie的工作机制是用户识别及状态管理.
Set-Cookie 响应首部字段,开始状态管理所使用的Cookie信息.
expires 指定浏览器可发送Cookie的有效期.(若不明确指定默认为浏览器关闭前为止)
path属性 限制指定Cookie的发送范围的文件目录
secure属性 用于限制Web页面仅在HTTPS安全连接时,才可以发送Cookie.
HttpOnly属性 是Cookie的扩展功能,它使JavaScript脚本无法获得Cookie.主要目的为防止跨站脚本攻击(Cross-site scripting,XSS)对Cookie的信息窃取.
6.7 其他首部字段
HTTP首部字段是可以自行扩展的
X-XSS-Protection 针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器XSS防护机制的开关.
7 确保Web安全的HTTPS
7.1证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的.
7.2 请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击被称为中间人攻击(Man-in-the-Middle attack, MITM)
7.3 HTTPS并非是应用层的一种新协议.只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已.
7.4 HTTPS比HTTP要慢2到100倍.
8 确认访问用户身份的认证
8.1HTTP/1.1使用的认证方式
BASIC认证(基本认证)
当请求资源需要BASIC认证时,服务器会随状态码401,返回带WWW-Authenticate首部字段的响应.该字段包含认证的方式及字符串
接收到401后,客户端发送账户密码给服务器.以用户名:密码形式经过Base64处理后发送.存在安全隐患,不推荐使用.
DIGEST认证(摘要认证)
SSL客户端认证
FormBase认证(基于表单认证) 多数认证基于表单认证.
9 基于HTTP的功能追加协议
9.1SPDY Google在2010年发布了SPDY(speedy),其开发目标旨在解决HTTP的性能瓶颈,缩短Web页面的加载时间(50%)
SPDY规定通信中使用SSL
9.2 WebSocket,即Web浏览器与Web服务器之间全双工通信标准.建立在HTTP基础上的协议,连接的发起方任然是客户端,如果确立WebSocket通信连接,服务器与客户端都可以直接向对方发送报文。
WebSocket通信协议在2011年称为标准,RTC6455
9.3 HTTP/2.0
HTTP/2.0围绕着主要的7项技术进行讨论(2012年).主要有压缩,多路复用,TLS义务化,协商,客户端拉曳/服务器推送,流量控制,WebSocket
9.4 Web服务器管理文件的WebDAV
WebDAV(Web-based Distributed Authoring and Versioning,基于万维网的分布式创作和版本控制)是一个可对Web服务器上的内容直接进行文件复制,编辑等操作的分布式文件系统.
10 构建Web内容的技术
10.1 CGI (Common Gateway Interface,通用网关接口)是指Web服务器在接收到客户端发送过来的请求后转发给程序的一组机制.
10.2 XML(extensible Markup Language,可扩展标记语言)是一种可按应用目标进行扩展的通用标记语言.旨在通过使用XML,使互联网数据共享变得更容易.
11 web的攻击技术
11.1 OS命令注入攻击
OS命令注入攻击(OS Command Injection)是指通过Web应用,执行非法的操作系统命令达到攻击的目的.只要在能调用Shell函数的地方就有存在被攻击的风险.OS命令注入攻击可
以向Shell发送命令,让Windows或Linux操作系统的命令行启动程序.
11.2 HTTP首部注入攻击
HTTP Header Injection,是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击.属于被动攻击