一、了解Web及网络基础
A.使用HTTP协议访问Web
1.根据Web浏览器地址栏中指定的URL,Web浏览器从Web服务器获取文件资源(resource)等信息,从而显示出Web页面
2.Web是建立在HTTP协议上通信的
B.HTTP的诞生
1.为知识共享而规划Web
C.网络基础TCP/IP
1.TCP/IP协议族:指TCP和IP这两种协议,把互联网相关的协议集合起来
2.TCP/IP的分层管理
3.TCP/IP通信传输流:客户端->HTTP(应用层)->TCP(传输层)->IP(网络层)->网络(链路层)->网络(链路层)->IP(网络层)->TCP(传输层)->HTTP(应用层)->服务器
D.与HTTP关系密切的协议:IP、TCP和DNS
1.负责传输的IP协议(Internet Protocol,网际协议)
2.确保可靠性的TCP协议
E.负责域名解析的DNS服务
1.DNS(Domain Name System)提供域名到IP地址之间的解析服务,通过域名查找IP地址,或逆向从IP地址反查域名的服务
F.各种协议与HTTP协议的关系
G.URI和URL
1.URI(Uniform Resource Identifier)
2.URI格式
http://user:pass@www.example.com:80/dir/index.html?uid=1#ch1
协议方案名://登录信息(可选)@服务器地址:商品号/带层次的文件路径?查询字符串#片段标识符
3.RFC(用来制定HTTP协议技术标准的文档,Request for Comments,征求修正意见书),并不是所有的应用程序都符合
二、简单的HTTP协议
A.HTTP协议用于客户端和服务器端之间的通信
1.应用HTTP协议通信时,必定有一端是客户端,一端是服务器端
B.通过请求和响应的交换达成通信
1.HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回,肯定是从客户端开始建立通信,服务器端在没有接收到请求之前不会发送响应
2.请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的
3.响应报文基本上由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成
C.HTTP是不保存状态的协议
1.自身不对请求和响应之间的通信状态进行保存,对于发送过的请求或响应都不做持久化处理
2.目的是为了更快地处理大量事务,确保协议的可伸缩性
D.请求URI定位资源
1.当客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求URI包含在内
2.如果不是访问特定资源而是对服务器本身发起请求,可以用一个*来代替请求URI
E.告知服务器意图的HTTP方法
1.GET:获取资源
2.POST:传输实体主体
3.PUT:传输文件(由于HTTP/1.1的PUT方法不带验证机制,存在安全性问题,因此一般仅用于REST标准)
4.HEAD:获得报文首部,不返回报文主体部分,用于确认URI的有效性及资源更新日期时间等
5.DELETE:删除文件(和PUT一样,用于REST标准)
6.OPTIONS:询问支持的方法(返回Allow:GET,POST,HEAD,OPTIONS这种内容)
7.TRACE:追踪路径(容易引发XST攻击)
8.CONNECT:要求用隧道协议连接代理,要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS加密后传输,格式:CONNECT 代理服务器名:端口号 HTTP版本
F.使用方法下达命令
1.E中所述的方法,可以指定请求的资源按期望产生某种行为
G.持久连接节省通信量
1.HTTP Persistent Connections,也称为HTTP keep-alive或HTTP connection reuse,只要任意一端没有明确提出断开链接,则保持TCP连接状态
2.减少了TCP连接的重复建立和断开所造成的额外开销,减轻服务器负载和加载时间,HTTP/1.1默认所有连接都是持久连接
3.持久连接使得多数请求以管线化(pipelining)方式发送,不用等待响应亦可直接发送下一个请求,这样就能做到同时并行发送多个请求
H.使用Cookie的状态管理
1.Cookie会根据从服务器端发磅的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie
三、HTTP报文内的HTTP信息
A.HTTP报文
1.用于HTTP协议交互的信息被称为HTTP报文。本身是由多行(用CR+LF作换行符)数据构成的字符串文本。
2.分为报文首部和报文主体两块,由空行来划分。并不一定有报文主体。
B.请求报文及响应报文的结构
1.请求行:包含用于请求的方法,请求URI和HTTP版本
2.状态行:包含表明响应结果的状态码,原因短语和HTTP版本
3.首部字段:包含表示请求和响应的各种条件和属性的各类首部,一般4种首部(通用首部、请求首部、响应首部、实体首部)
4.其他:可能包含HTTP的RFC里未定义的首部(Cookie等)
C.编码提升传输速率
1.报文主体和实体主体的差异
2.压缩传输的内容编码:内容编码指明应用在裸体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责编码。常用的有gzip、compress、deflate、identity
3.分割发送的分块传输编码:分块传输编码会将实体主体分成多个部分(块)。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记
D.发送多种数据的多部分对象集合
1.MIME(Multiprupose Internet Mail Extensions,多用途因特网邮件扩展)机制,允许邮件处理文本、图片、视频等多个不同类型的数据
2.HTTP协议也采纳了多部分对象集合
3.在HTTP报文中使用多部分对象集合时,需要在首部字段里加上Content-type。
E.获取部分内容的范围请求
1.指定范围发送的请求叫做范围请求(Range Request),执行范围请求时会用到首部字段Range来指定资源的byte范围
F.内容协商返回最合适的内容
1.内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。(Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language)
3.内容协商技术3种类型
四、返回结果的HTTP状态码
A.状态码告知从服务器端返回的请求结果
1.状态码是当客户端向服务器端发送请求时,描述返回的请求结果。
2.只要遵守状态码类别的定义,改变或者自建状态码都没问题
B.2XX成功
1.200 OK:表示客户端发来的请求在服务器端被正常处理了
2.204 No Content:代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分,另外也不允许返回任何实体的主体。
3.206 Partial Content:表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求
C.3XX重定向
1.301 Moved Permanently:永久性重定向。表示请求的资源已经被分配了新的URI,以后应使用资源现在所指的URL。
2.302 Found:临时性重定向,表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI
3.303 See Other:表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源
4.304 Not Modified:表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304 Not Modified(服务器资源未改变,可直接使用客户端未过期的缓存)
5.301、302、303几乎所有浏览器都会把POST改成GET并删除请求报文内的主体,之后请求会再次发送,301、302是禁止将POST改成GET的,但都会这么做。304其实和重定向没什么关系。
6.307 Temporary Redirect:临时重定向。307会遵照浏览器标准,不会从POST变成GET,但是对于处理响应时的行为,不同浏览器可能出现不同情况
D.4XX客户端错误
1.400 Bad Request:表示请求报文中存在语法错误
2.401 Unauthorized:表示发磅的请求需要有通过HTTP认证的认证信息
3.403 Forbidden:表明对请求资源的访问被服务器拒绝了。未获得文件系统的访问授权,访问权限出现问题等情况可能导致
4.404 Not Found:服务器上无法找到请求的资源,也可以在服务器端拒绝请求且不想说明理由时使用
E.5XX服务器错误
1.500 Internal Server Error:表明服务器端在执行请求时发生了错误
2.503 Service Unavailable:表明服务器暂时处理超负载或正在进行停机维护,目前无法处理请求
五、与HTTP协作的Web服务器
A.用单台虚拟主机实现多个域名
1.在相同的IP地址下,由于虚拟主机(Virtual Host,又称虚拟服务器)可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URL
B.通信数据转发程序:代理、网关、隧道
1.代理:是一种有转发功能的应用程序,扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端
2.网关:是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理
3.隧道:是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序
C.保存资源的缓存
1.缓存服务器是代理服务器的一种,并归类在缓存代理类型中。优势在于利用缓存可避免多次从源服务器转发资源,客户端可就近从缓存服务器上获取资源,源服务器不必多次处理相同的请求
六、HTTP首部
A.HTTP报文首部
1.HTTP请求报文:由方法、URI、HTTP版本、HTTP首部字段等部分构成
2.HTTP响应报文:由HTTP版本、状态码、HTTP首部字段3部分构成
B.HTTP首部字段
1.HTTP首部字段传递重要信息:提供报文主体大小、所使用的语言、认证信息等内容
2.HTTP首部字段结构:由首部字段名和字段值构成,中间用冒号“:”分隔,字段值可以有多个值
3.4种HTTP首部字段类型
4.HTTP/1.1首部字段:P80-P82
5.非HTTP/1.1首部字段:Cookie、Set-Cookie和Content-Disposition的使用频率也很高
6.End-to-end首部和Hop-by-hop首部
C.HTTP/1.1通用首部字段
1.Cache-Control:操作缓存的工作机制,多个指令间逗号分隔
2.Connection:控制不在转发给代理的首部字段、管理持久连接
3.Date:青蛙创建HTTP报文的日期和时间
4.Pragma:仅作为与HTTP/1.0的向后兼容而定义,操作缓存
5.Trailer:事先说明在报文主体后记录了哪些首部字段,可应用在HTTP/1.1分块传输编码时
6.Transfer-Encoding:规定了传输报文主体时采用的编码方式,HTTP/1.1仅对分块传输编码有效
7.Upgrade:用于检测HTTP协议及其他协议是否可使用更高的版本进行通信
8.Via:追踪客户端与服务器之间的请求和响应报文的传输路径,经常会和TRACE方法一起使用
9.Warning:会告知用户一些与缓存相关的问题的警告
D.请求首部字段
1.Accept:通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级
2.Accept-Charset:通知服务器用户代理支持的字符集及字符集的相对优先顺序
3.Accept-Encoding:告知服务器用户代理支持的内容编码的优先级顺序(gzip、compress、deflate、identity)
4.Accept-Language:告知服务器用户代理 能够处理的自然语言集,以及自然语言集的优先级
5.Authorization:告知服务器,用户代理的认证信息(证书值)
6.Expect:告知服务器期望出现的某种特定行为
7.From:告知服务器使用用户代理的用户的电子邮件地址
8.Host:告知服务器,请求的资源所处的互联网主机名和端口号,在HTTP/1.1规范内是唯一一个必须被包含在请求内的首部字段
9.If-Match:If-xxx类型的条件请求,服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求
10.If-Modified-Since:如果在If-Modified-Since字段指定的日期时间后,资源发生了更新,服务器会接受请求
11.If-None-Match:只有在If-None-Match的字段值与ETag值不一致时,可处理该请求
12.If-Range:告知服务器若指定的If-Range字段值(ETag值或者时间)和请求资源的ETag值或时间相一致时,则作为范围请求处理
13.If-Unmodified-Since:告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求
14.Max-Forwards:以十进制整数形式指定可经过的服务器最大数目
15.Proxy-Authorization:认证行为发生在客户端与代理之间
16.Range:告知服务器资源的指定范围
17.Referer:告知服务器请求的原始资源的URI
18.TE:告知服务器客户端能够处理响应的传输编码方式及相对优先级
19.User-Agent:将创建请求的浏览器和用户代理名称等信息传达给服务器
E.响应首部字段
1.Accept-Ranges:告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源(bytes或者none)
2.Age:源服务器在多久前创建了响应
3.ETag:告知客户端实体标识,是一种可将资源以字符串形式做唯一标识的方式
4.Location:将响应接收方引导 至某个与请求URI位置不同的资源
5.Proxy-Authenticate:把由代理服务器所要求的认证信息发送给客户端
6.Retry-After:告知客户端应该在多久之后再次发送请求
7.Server:告知客户端当前服务器上安装的HTTP服务器应用程序的信息
8.Vary:可能对缓存进行控制,源服务器会向代理服务器传达关于本地缓存使用方法的命令,仅对请求中含有相同Vary指定首部字段的请求返回缓存
9.WWW-Authenticate:告知客户端适用于访问请求URI所指定资源的认证方案和带参数提示的质询
F.实体首部字段
1.Allow:用于通知客户端能够支持Request-URI指定资源的所有HTTP方法
2.Content-Encoding:告知客户端服务器对实体的主体部分先用的内容编码方式
3.Content-Language:告知客户端,实体主体使用的自然语言
4.Content-Length:表明实体主体部分的大小
5.Content-Location:给出与报文主体部分相对应的URI
6.Content-MD5:检查报文主体在传输过程中是否保持完整,以及确认传输到达
7.Content-Range:针对范围请求,告知客户端作为响应返回的实体哪个部分符合范围请求
8.Content-Type:说明了实体主体内对象的媒体类型
9.Expires:将资源失效的日期告知客户端
10.Last-Modified:指明资源最弱修改的时间
G.为Cookie服务的首部字段
1.Set-Cookie
2.Cookie:告知服务器,当客户端想获得HTTP状态管理支持时,就会在请求中包含从服务器接收到的Cookie
H.其他首部字段
1.X-Frame-Options:用于控制网站内容在其他Web网站的Frame标签内的显示问题(DENY或者SAMEORIGIN)
2.X-XSS-Protection:针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器XSS防护机制的开关(0或1)
3.DNT:是Do Not Track的简称,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法(0或1)
4.P3P:通过利用P3P(The Platform for Privacy Preferences,在线隐私偏好平台)技术,可以让Web网站上的个人隐私变成一种仅供程序可理解的嘎啊,以达到保护用户隐私的目的
七、确保Web安全的HTTPS
A.HTTP的缺点
1.通信使用明文(不加密),内容可能会被窃听
2.不验证通信方的身份,因此有可能遭遇伪装
3.无法证明报文的完整性,所以有可能已遭篡改
B.HTTP+加密+认证+完整性保护=HTTPS
1.HTTP加上加密处理和认证以及完整性保护后即是HTTPS
2.HTTPS是身披SSL外壳的HTTP
3.相互交换密钥的公开密钥加密技术
4.证明公开密钥正确性的证书
5.HTTPS的安全通信机制
八、确认访问用户身份的认证
A.何为认证
1.核对信息通常包括:密码、动态令牌、数字证书、生物认证、IC卡等
2.HTTP/1.1使用的认证方式:BASIC认证、DIGEST认证、SSL客户端认证、FormBase认证
B.BASIC认证
1.服务器返回401->客户端将用户ID和密码发送给服务器,通过base64编码处理->接收到服务器验证
C.DIGEST认证
1.质询响应方式:一开始一方会先发送认证要求给另一方,接着使用从另一方那接收到的质询码计算生成响应码,最后将响应码返回给对方进行认证的方式
2.服务器返回401,WWW-Authenticate首部字段包含质问响应方式认证所需的临时质询码->客户端返回用户ID密码及质询码->服务器确认
D.SSL客户端认证
1.步骤:服务器发送Certificate Request报文->客户端把证书信息以Client Certificate报文方式发送给服务器->服务器验证证书通过后可领取证书内容客户端的公开密钥,然后开始HTTPS加密通信
2.SSL会使用证书和基于表单认证组合形成一种双因素认证(Two-factor authentication),认证过程中不仅需要密码这一个因素,还需要申请认证者提供其他持有信息,从而作为另一个因素,与其组合使用
E.基于表单认证
1.客户端会向服务器上的Web应用程序发送登录信息(Credential),按登录信息的验证结果认证
九、基于HTTP的功能追加协议
A.基于HTTP的协议
1.一些新协议的规则是基于HTTP的,并在此基础上添加了新的功能
B.消除HTTP瓶颈的SPDY
1.HTTP的瓶颈
2.Ajax的解决方法
3.Comet的解决方法
4.SPDY的设计与功能
C.使用浏览器进行全双工通信的WebSocket
1.WebSocket,即Web浏览器与Web服务器之间全双工通信标准。主要为了解决Ajax和Comet里XMLHttpRequest附带的缺陷所引起的问题
2.建立在HTTP基础上的协议,一旦确立WebSocket通信连接,不论服务器还是客户端,做生意一方都可直接向对方发送报文
3.特点
D.期盼已久的HTTP/2.0
1.SPDY,HTTP Speed + Mobility,Network-Friendly HTTP Upgrade
E.Web服务器管理文件的WebDAV
1.WebDAV(Web-based Distributed Authoring and Versioning,基于万维网的分布式创作和版本控制)是一个可对Web服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。
十、构建Web内容的技术
十一、Web的攻击技术
A.针对Web的攻击技术
1.HTTP不具备必要的安全功能,HTTP就是一个通用的单纯协议机制
2.在客户端即可篡改请求,通过URL查询字段或表单、HTTP首部、Cookie等途径
3.针对Web应用的攻击模式
B.因输出值转义不完全引发的安全漏洞
1.跨站脚本攻击(Cross-Site Scripting,XSS)指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JS的一种攻击
2.SQL注入攻击(SQL Injection)指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击
3.OS命令注入攻击(OS Command Injection)指通过Web应用执行非法的操作系统命令达到攻击的目的
4.HTTP首部注入攻击(HTTP Header Injection)指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击
5.邮件首部注入攻击(Mail Header Injection)指Web应用中的邮件发送功能
6.目录遍历攻击(Directory Traversal)指对无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击
7.远程文件包含漏洞(Remote File Inclusion)指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,当脚本读取后,就可运行任意脚本的一种攻击
8.安全对策:客户端的验证、Web应用端(服务器端)的验证(输入值验证、输出值转义)
C.因设置或设计上的缺陷引发的安全漏洞
1.强制浏览(Forced Browsing)指从安置在Web服务器的分开目录下的文件中,浏览那些原本非自愿公开的文件
2.不正确的错误消息处理(Error Handling Vulnerability)指Web应用的错误信息内包含对攻击者有用的信息,包括Web应用抛出的错误消息、数据库等系统抛出的错误消息
3.开放重定向(Open Redirect)是一种对指定的任意URL作重定向跳转的功能
D.因会话管理疏忽引发的安全漏洞
1.会话劫持(Session Hijack)指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的
2.会话固定攻击会强制用户使用攻击者指定的会话ID
3.跨站点请求伪造(Cross-Site Request Forgeries,CSRF)指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期个人信息或设定信息等某些状态更新,属于被动攻击
E.其他安全漏洞
1.密码破解攻击(Password Cracking)即算出密码,突破认证
2.点击劫持(Clickjacking)指利用透明的按钮或链接做成陷阱,覆盖在Web页面之上
3.Dos攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击
4.后门程序(Backdoor)指开发设置的隐藏入口,可不按正常步骤使用受限功能