图解HTTP 上野宣2014年
阅读顺序应为:《图解HTTP》->《HTTP权威指南》->《TCP/IP详解》
《图解HTTP》下载地址:
http://www.java1234.com/a/javabook/javabase/2017/0712/8420.html
截止2017.10.14,HTTP协议版本为1.1,HTTP/2.0还在开发中。
第1章 了解Web及网络基础
HTTP依赖于IP、TCP、DNS。
标准的URI协议方案有30种左右,如ftp、http、ldap、mailto、news、tel、telnet、urn等。
URI格式:
http://user:pass@www.example.jp:80/dir/index.html?uid=1#ch1,
协议方案名:登录信息@服务器地址:服务器端口号/带层次的文件路径?查询字符串#片段标识符。
第2章 简单的HTTP协议
请求报文结构:方法、URL、协议版本、请求首部字段(Host、Connection、Content-Type、Content-Length)、内容实体。
响应报文结构:协议版本、状态码、状态码的原因短语、响应首部字段(Date、Content-Length、Content-type),主体。
HTTP是无状态了,但是为了实现期望保持状态功能,于是引入了Cookie技术。
HTTP方法:GET(获取资源),POST(传输实体主体),PUT(传输文件),HEAD(获得报文首部),DELETE(删除文件),OPTIONS(询问支持的方法),TRACE(追踪路径,不常用且容易引发XST攻击),CONNECT(要求用隧道协议连接代理,主要是SSL和TLS)。PUT和DELETE不带验证机制。
持久连接节省通信量,只要任意一段没有明确提出断开连接则保持TCP连接状态。
管线化方式发送,基于持久连接,可以同时并行发送多个请求。
使用Cookie的状态管理。
第3章 HTTP报文内的HTTP信息
- HTTP报文大致可以分为报文首部和报文主体两块,有空行CR+LF划分(CR(Carriage Return,回车符:16进制0x0d)和LF(Line Feed,换行符,16进制0x0a))。
- 请求报文首部:请求行、请求首部字段、通用首部字段。实体首部字段,其他。
- 响应报文首部:状态行、响应首部字段、通用首部字段、实体首部字段、其他。
- 编码提升传输速率。常用的内容编码有:gzip(GNU zip), compress(UNIX系统的标准压缩),deflate(zlib),identity(不进行编码)。分割发送的分块传输编码。
多部分对象集合:multipart/form-data(Web表单文件上传时使用)、multipart/byteranges(状态码206(Partial Content,部分内容)相应报文包含了多个范围的内容时使用),首部字段需要加上Content-type。
获取部分内容的范围请求(Range Request):5001~10000字节为Range: bytes=5001-10000,从5001字节之后全部的为Range: bytes=5001-,从一开始到3000字节和5000~7000字节的多重范围为Range: byte=-3000, 5000-7000。针对范文请求,响应会返回状态码为206 Partial Content的响应报文,对于多重反胃的范围请求,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文,如果服务器端无法响应范围请求则会返回状态码200 OK和完整的实体内容。
内容协商(Content Negotiation)返回最合适的内容(如英语版和中文版的Web页面)。判断基准有:Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language。内容协商技术有3种类型:服务器驱动协商(服务器端自动处理),客户端驱动协商(用户选择或者JavaScript选择或者按照OS类型或者浏览器类型),透明协商(服务器端驱动和客户端驱动的结合体,各自进行内容协商)。
第4章 返回结果的HTTP状态码
状态码:告知从服务器端返回的请求结果。
状态码类别:1XX,Informational(信息性状态码),接收的请求正在处理;2XX,Success(成功状态码),请求正常处理完毕;3XX,Redirection(重定向状态码),需要进行附加操作以完成请求;4XX,Client
Error(客户端错误状态码),服务器无法处理请求;5XX,Server Error(服务器错误状态码),服务器处理请求出错。RFC2616上的HTTP状态码有40种,加上WebDAV和附加HTTP状态码,数量达60余种,但是常用的大概只有14种。
200 OK:请求被正常处理了。
204 Not Content:请求处理成功但返回响应报文中不含实体的主体部分也不允许返回任何实体的主体。
206 Partial Content:客户端进行了范围请求,服务器成功执行了这部分GET请求,响应报文中包含Content-Range指定范围的实体内容。
301 Moved Permanently:永久性重定向,表示请求的资源已被分配了新的URL,指定资源路径最后忘记添加斜杠就会产生301状态码。
302 Found:临时性重定向。
303 See Other:表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源,与302类似,但是指定了GET方法。
304 Not Modified:表示客户端发送附带条件的请求(GET方法请求报文中含If-Match、If-Modified-Since、If-Node-Match、If-Range、If-Unmodified-Since中任一个首部)时,服务器端允许请求访问资源,但未满足条件的情况。与重定向实际上没有关系。
307 Temporary Redirect:临时重定向,与302差不多,但是遵照浏览器标准,不会从POST变成GET。
400 Bad Request:表示请求报文中存在语法错误,需修改请求的内容后再次发送,但是浏览器会像200 OK一样对待该状态码。
401 Unauthorized:表示发送请求需要通过HTTP认证(BASIC认证、DIGEST认证)的认证信息,如果之前已进行过一次请求则表示用户认证失败。
403 Forbidden:表示请求资源的访问被服务器拒绝了,服务器没有必要给出拒绝的详细理由,如果想做说明的话可以在实体的主体部分对原因进行描述。未获得文件系统的访问授权、访问权限出现某些问题(从未授权的发送源IP地址试图访问)等都可发生403。
404 Not Found:表明服务器上无法找到请求的资源,如果服务器拒绝请求且不想说明理由时也可以使用。
500 Internal Server Error:表名服务器在执行请求时发生了错误,也有可能是Web应用存在的bug或某些临时的故障。
503 Service Unavailable:表名服务器暂时处于超负载或者正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入RetryAfter首部字段再返回给客户端。
状态码和状况可能是不对应的,但是用户可能察觉不到这点。
第5章 与HTTP协作的Web服务器
一台Web服务器可搭建多个独立域名的Web网站,也可作为通信路径的中转服务器提升传输效率。
用单台虚拟技术及实现多个域名。
通信数据转发程序:代理(有转发功能的应用程序)、网关(转发其他服务器通信数据的服务器)、隧道(在相隔甚远的客户端和服务器两者之间进行中转并保持双方通信连接的应用程序)。
代理服务器:不改变请求的URI,会直接发送给前方持有资源的目标服务器(源服务器),源服务器返回给代理服务器,代理服务器再传给客户端。每次通过代理服务器转发请求或者响应时会追加写入Via首部信息。代理服务器可以级联多台,Via会标记出经过的主机信息。使用代理的理由:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为只要目的等等。代理有多种使用方法,按两种基准分类,一种是是否使用缓存,另一种是是否会修改报文,对应缓存代理和透明代理。
网关:利用管管可以由HTTP请求转化为其他协议通信。工作机制与代理十分相似。利用网关能够提高通信的安全性,因为可以在客户端域网关之间的通信线路上加密以确保连接的安全。比如网关可以连接数据库使用SQL语句查询数据,另外在Web购物网站进行信用卡结算时网关可以和信用卡结算系统联动。
隧道:可按要求建立起一条与其他服务器的通信线路,届时使用SSL等加密手段进行通信,目的是确保客户端能与服务器进行安全的通信。隧道本身不会去解析HTTP请求,通道本身是透明的。
保存资源的缓存:缓存是指代理服务器或客户端本地磁盘保存的资源副本。利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间。缓存服务器的缓存有效期限,失效则从源服务器更新。客户端缓存也有有效期限,失效则更新。
第6章 HTTP首部
HTTP请求报文的报文首部的请求行(方法、URI、HTTP版本),请求首部字段和通用首部字段以及实体首部字段合为HTTP首部字段。HTTP响应报文类似,状态行包含HTTP版本、状态码,响应首部字段和通用首部字段以及实体首部字段为HTTP首部字段。
使用首部字段是为了给浏览器和服务器提供报文主题大小、所使用的语言、认证信息等内容。
首部字段格式(首部字段名:字段值),如果HTTP首部字段重复了,有些浏览器可能处理第一次出现的首部字段,有些则优先处理最后出现的首部字段。
通用首部字段:Cache-Control(控制缓存的行为),Connection(逐跳首部、连接的管理),Date(创建报文的日期时间),Pragma(报文指令),Trailer(报文末端的首部一览),Transfer-Encoding(指定报文主体的传输编码方式),Upgrade(升级为其他协议),Via(代理服务器的相关信息),Warning(错误通知)。
请求首部字段:Accept(用户代理可处理的媒体类型),Accept-Charset(优先的字符集),Accept-Encoding(优先的内容编码),Accept-Language(优先的语言),Authorization(Web认证信息),Expect(期待服务器的特定行为),From(用户的电子邮箱地址),Host(请求资源所在服务器),If-Match(比较试题标记ETag),If-Modified-Since(比较资源的更新时间),If-None-Match(比较实体标记,域If-Match相反),If-Range(资源未更新时发送实体Byte的范围请求),If-Unmodified-Since(比较资源的更新时间,域If-Modified-Since相反),Max-Forwards(最大传输逐跳数),Proxy-Authorization(代理服务器要求客户端的认证信息),Range(实体的字节范围请求),Referer(对请求中URI的原始获取方),TE(传输编码的优先级),User-Agent(HTTP客户端程序的信息)。
响应首部字段:Accept-Ranges(是否接受字节范围请求),Age(推算资源创建经过时间),ETag(资源的匹配信息),Location(令客户端重定向至指定URI),Proxy-Authenticate(代理服务器对客户端的认证信息),Retry-After(对再次发起请求的时机要求),Server(HTTP服务器的安装信息),Vary(代理服务器缓存的管理信息),WWW-Authenticate(服务器对客户端的认证信息)。
实体首部字段:Allow(资源可支持的HTTP方法),Content-Encoding(实体主体适用的编码方式),Content-Language(实体主体的自然语言),Content-Length(实体主体的大小,单位为字节),Content-Location(替代对应资源的URI),Content-MD5(实体主体的报文摘要),Content-Range(实体主体的位置范围),Content-Type(实体主体的媒体类型),Expires(实体主体过期的日期时间),Last-Modified(资源的最后修改日期时间)。
非HTTP/1.1首部字段:不限于RFC2616中是定义的47种首部字段,还有Cookie、Set-Cookie和Content-Disposition等使用频率也很高,这些非正式的首部字段统一归纳在RFC4229HTTP Header Field Registrations中。
End-to-end首部:端到端首部,分在此类别中的首部会转发请求/响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。
Hop-by-hop首部:逐跳首部,分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发,使用hop-by-hop首部,需提供Connection首部字段。
通用首部字段:
- Cache-Control:多个参数用逗号隔开
- Connection:控制不再转发给代理的首部字段、管理持久连接,值:Upgrade、close、keep-alive。
- Date:创建报文的日期和时间,GMT为准。
- Pragma:历史遗留字段,值:no-cache。
- Trailer:值Expires。
- Transfer-Encoding:值chunked。
- Upgrade:值为通信协议,需要Connection: Upgrade,响应状态码可为101 Switching Protocols。
- Via:追踪客户端与服务器之间的请求和响应报文的传输路径。
- Warning:通常会告知用户一些与缓存相关的警告,值格式为[警告码][警告的主机:端口号]”[警告内容]”([日期时间])。
请求首部字段:
- Accept:例子 text/html,application/xhtml+xml,application/xml;q=0.3。
- Accept-Charset:例子iso-8859-5, unicode-1-1;q=0.8。
- Accept-Encoding:例子gzip, deflate。(有gzip、compress、deflate、identity)。
- Accept-Language:例子zh-cn,zh;q=0.7,en-us,en;q=0.3。
- Authorization:例子Basic dWVub3NlbjpwYXNzd29yZA==。
- Expect:例子100-continue。
- Form:例子info@hackr.jp。
- Host:例子www.pifutan.com
- If-Match:例子”123456”。
- If-Modified-Since:后面接指定的日期时间。
- If-None-Match:例子*。
- If-Range:例子”123456”。
- If-Unmodified-Since:后面接指定日期时间。
- Max-Forwards:最大转发次数,值变为0时返回响应。
- Proxy-Authorization:例子Basic dGlwOjkpNLAGfFY5。
- Range:例子bytes=5001-10000。
- Referer:后面接网址,实际上正确拼写是Referrer,但是错误被沿用下来了。
- TE:例子gzip, deflate;q=0.5。
- User-Agent:用于擦宏达浏览器的种类,例子Mozilla/5.0 (Windows NT 6.1; WOW64;
rv:13.0) Gec。
响应首部字段:
- Accept-Range:值为bytes或none。
- Age:告知客户端源服务器在多久前创建了响应,字段值单位为秒。
- ETag:告知客户端实体标识,为服务器资源唯一性标识。
- Location:URI位置。
- Proxy-Authenticate:例子Basic realm=”Usagidesign Auth”。
- Retry-After:告知客户端在多久后再次发送请求,单位为秒或具体的日期时间。
- Server:HTTP服务器应用程序的信息。例子Apache/2.2.6 (Unix) PHP/5.2.5。
- Vary:例子Accept-Language。
- WWW-Authenticate:例子Basic realm=”Usagidesign Auth”。
实体首部字段:
- Allow:例子GET, HEAD。
- Content-Encoding:例子gzip。
- Content-Language:例子zh-CN。
- Content-Length:实体主体部分的大小,单位为字节。
- Content-Location:值为URI。
- Content-MD5:值为MD5算法生成的值,用于检查报文主体在传输过程中是否保持完整以确认传输到达。
- Content-Range:例子bytes 5001-10000/10000。
- Content-Type:例子text/html; charset=UTF-8。
- Expires:资源失效的日期。
- Last-Modified:资源最终修改的时间。
为Cookie服务的首部字段:
- Set-Cookie:属于响应首部字段,表示开始状态管理所使用的Cookie信息。例子status=enable; expires=Tue, 05 Jul 2011 07:26:31。
- Cookie:属于请求首部字段,表示服务器接收的Cookie信息。例子status=enable。
其他首部字段:
- X-Frame-Options:属于响应首部字段,用于控制网站内容在其他Web网站的Frame标签内的显示问题,主要目的是为了防止点击劫持动机,值为DENY或SAMEORIGIN。
- X-XSS-Protection:属于响应首部字段,针对跨站脚本攻击XSS的一种策略,用于控制浏览器XSS防护机制的开关,值为0(XSS过滤设置为无效状态)或1(有效)。
- DNT:属于请求首部字段,DNT是Do Not Track的简称,为拒绝个人信息被手机,表示拒绝被精准广告追踪的一种方法,值为0(同意被追踪)或1(拒绝)。
- P3P:属于响应首部字段,利用P3P(The Platform for Privacy
Prefereces,在线隐私偏好平台)技术,可以让Web网站上的个人隐私编程一种仅供程序可理解的形式,已达到保护用户隐私的目的。例子CP=”CAO DSP LAW CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa。
第7章 确保Web安全的HTTPS
HTTP不足:(1)通信使用明文(不加密),内容可能会被窃听(2)不验证通信的身份,因此有可能遭遇伪装(或者遭遇海量请求下的DoS攻击)(3)无法证明报文的完整性,所以有可能已遭篡改(4)其他缺点。
互联网上的任何角落都存在通信内容被窃听的风险,用抓包(Packet Capture)或嗅探器(Sniffer)工具即可,如Wireshark( www.wireshark.org )。
与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)或HTTP over SSL。这种属于通信的加密,还可以对通信的内容本身加密的方式,对内容加密则要求客户端和服务器端同时具备加密和解密机制。SSL提供证书,而伪造证书从技术角度来说是异常困难的。
HTTPS=HTTP+加密+认证+完整性保护。Web的登录页面和购物阶段界面等使用HTTPS通信。HTTPS并非新协议,知识HTTP通信接口部分用SSL和TLS协议代替而已即先和SSL通信,再由SSL和TCP通信。SSL是独立于HTTP的洗衣,也可以域SMTP和Telnet等协议结合使用,可以说SSL是当今世界上应用最为广泛的网络安全技术。
HTTPS采用混合加密机制:在交换密钥环节使用公开密钥(非对称加密,域似有密钥结合使用)加密方式,之后的建立通信交换报文阶段则使用共享密钥(加密和解密共用一个密钥,也称为对称加密)加密方式。
证明公开密钥正确性的证书:公开密钥可能被替换了,第三方机构,如威瑞信VeriSign,申请得到数字证书(也称为公钥证书或直接叫证书)。
可证明组织真实性的EV SSL证书:证明作为通信乙方的服务器是否规范。 用以确认客户端的客户端证书。用户需要自行安装证书。
由自认证机构颁发的证书称为自签名证书。
HTTPS通信:
步骤1:客户端通过发送Client
Hello报文开始SSL通信,报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的加密算法及密钥长度等)。
步骤2:服务器可进行SSL通信时,会以Server
Hello报文作为应答,和客户端一样报文中包含SSL版本以及加密组件,服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
步骤3:之后服务器发送Certificate报文,报文中包含公开密钥证书。
步骤4:最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
步骤5:SSL第一次握手结束后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称作Pre-master secret的随机密码串,该报文已用步骤3中的公开密钥进行加密。
步骤6:接着客户端继续发送Change Cipher Spec报文,该报文会提示服务器,再次保温之后的通信会采用Pre-master secret密钥加密。
步骤7:客户端发送Finished报文,包含连接至今全部报文的整体校验值,这次握手协商能够成功要以服务器是否能够正确机密该报文作为判定标准。
步骤8:服务器同样发送Change Cipher Spec报文。
步骤9:服务器同样发送Finished报文。
步骤10:服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成了,当然通信会受到SSL的保护,从此处开始进行应用层协议的通信,即发送HTTP请求。
步骤11:应用层协议通信,即发送HTTP响应。
步骤12:最后由客户端断开连接,且发送close_notify报文,这步之后再发送TCP FIN报文来关闭与TCP的通信。 以上流程中,应用层发送数据时会附加一种加做MAC(Message Authentication Code)的报文摘要,MAC能够查知报文是否遭到篡改,从而保护报文的完整性。HTTPS比HTTP要慢2到100倍。SSL速度慢有两种原因,一种是通信慢,另一种是由于大量消费CPU及内存等资源,导致处理速度变慢。速度变慢的问题并没有根本性的解决方案,只能用SSL加速器(专用服务器)来改善情况。因此并不会一直使用HTTPS,包含敏感信息时才使用HTTPS加密通信。另外购买证书的开销也是原因之一。
第8章 确认访问用户身份的认证
认证核对的信息通常指:密码、动态令牌、数字证书、生物认证、IC卡等。
HTTP/1.1认证方式:BASIC认证(基本认证),DIGEST认证(摘要认证),SSL客户端认证,FormBase认证(基于表单认证),以及Windows统一认证(Keberos认证、NTLM认证)。
BASIC认证:(Base64编码处理,不够便捷灵活,不够安全,不常用)
步骤1:当请求的资源需要BASIC认证时,服务器会返回状态码401 Authorization Required且返回WWW-Authenticate(包含认证的方式及Request-URI安全域字符串realm)首部字段的响应。
步骤2:接收状态码401的客户端为了通过BASIC认证,需要将用户ID和密码中间加上冒号(:)再经过Base64编码处理。
步骤3:接收到包含收不Authorization请求的服务器,会对认证信息的正确性进行验证,通过的话则返回一条包含Request-URI资源的响应。质询响应方式:一开始一方会先发送认证要求给另一方,接着使用从另一方那接收到的质询码计算生成响应码,最后将响应码返回给对方进行认证的方式。
DIGEST认证:
步骤1:请求需认证的资源时,服务器会随着状态码401返回WWW-Authenticate(包含质问响应方式认证所需的临时质询码(随机数,nonce,推荐有Base64编码的16进制数组成形式)和realm)。
步骤2:接收到401装填吗的客户端,返回的响应中包含DIGEST认证必须的收不字段Authorization信息。
步骤3:接收到包含首部字段Authorization请求的服务器,会确认认证信息的正确新,认证通过后返回包含Request-URI资源的响应。SSL客户端认证:
步骤1:接收到需要认证资源的请求,服务器会发送Certificate Request报文,要求客户端提供客户端证书。
步骤2:用户选择将发送的客户端证书后,客户端会吧客户端证书信息以Client Certificate报文方式发送给服务器。
步骤3:服务器验证客户端证书验证通过后方可领取证书内客户端的公开密钥,然后开始HTTPS加密通信。SSL客户端认证采用双因素认证:证书加上表单认证。
基于表单认证:用户ID和密码等登录信息发送认证。这种方式占了很大部分。
Session管理以及Cookie应用:
步骤1:客户端把用户ID和密码等登录信息放入报文的实体部分,通常是以POST方法把请求发送给服务器,这时会用HTTPS通信来进行HTML表单画面的显示和用户输入数据的发送。
步骤2:服务器会发放用以识别用户的SessionID,通过验证从客户端发送过来的登录信息进行身份认证,然后把用户的认证状态与SessionID绑定后记录在服务器。(为减轻跨站脚本攻击XSS造成的损失,建议事先在Cookie内加上httponly的属性)
步骤3:客户端接收到服务器端发来的SessionID后,会将其作为Cookie保存在本地,下次向服务器发送请求时,浏览器会自动发送Cookie,所以SessionID也会随之发送到服务器,服务器端可通过验证接收到的SessionID识别用户和其认证状态。密码一般用加盐(salt)的方式增加额外信息,在使用散列函数计算出散列后保存。
第9章 基于HTTP的功能追加协议
Google在2010年发布了SPDY,旨在解决HTTP的性能瓶颈,缩短Web页面的加载时间(50%),http://www.chromium.org/spdy
HTTP瓶颈:(1)一条连接上只可发送一个请求(2)请求只能从客户端开始,客户端不可以接受除响应以外的指令(3)请求/响应首部未经压缩就发送,首部信息越多延迟越大(4)发送冗长的首部,每次互相发送相同的首部造成的浪费较多(5)可任意选择数据压缩格式,非强制压缩发送。
Ajax的解决办法:利用JavaScript和DOM操作局部Web页面替换加载的一步通信手段,减少了通信量,但是实时获取有可能会导致大量请求产生,并未解决HTTP协议本身存在的问题。
Comet的解决办法:一旦服务器端有内容更新了,Comet不会让请求等待,而是直接给客户端返回响应,这是一种通过延迟应答模拟实现服务器端向客户端推送的功能。为了实现推送功能,Comet会将请求的响应置于挂起状态,服务器内容更新了再返回该响应,连接的持续时间变长,维持连接会消耗更多的资源,并未解决HTTP协议本身存在的问题。
SPDY的解决:没有完全改写HTTP协议,而是在TCP/IP的应用层与运输层之间通过新加会话层(SPDY会话层)的形式运作,并且SPDY规定通信中使用SSL,但还是HTTP方式建立通信连接。可获得功能:多路复用流(单一TCP连接可以无限制处理多个HTTP请求),赋予请求优先级),压缩HTTP首部,推送功能(支持服务器主动向客户端推送数据的功能),服务器提示功能(服务器可以主动提示客户端请求所需的资源)。
SPDY消除Web瓶颈了吗?使用SPDY时Web浏览器和Web服务器都要为对应SPDY做出一定程度上的改动,但是SPDY的技术导入进展不佳,因为SPDY基本上只是将打个域名(IP地址)通信多路复用,所以当一个Web网站上使用多个域名下的资源,改善效果就会收到限制。SPDY确实是一种可以有效消除HTTP瓶颈的技术,但很多Web网站存在的问题并非仅仅是由HTTP瓶颈所导致(如Web内容的编写方式)。
WebSocket为解决HTTP瓶颈问题在2011年12月应运而生,WebSocket即Web浏览器与Web服务器之间全双工通信标准,主要是为了解决Ajax和Comet里XMLHttpRequest附带的缺陷所引起的问题。
WebSocket特点:推送功能(支持服务器向客户端推送数据的推送功能),减少通信量(只要建立起WebSocket连接就希望一直保持连接状态,且首部信息小),一次握手(需要Upgrade:websocket首部字段,返回状态码101 Switch Prorocols)。
HTTP/2.0在路上:7项技术讨论:多路复用、TLS义务化、协商、客户端拉/服务器推、流量控制、WebSocket。
WebDAV(Web-based Distributed Authoring and Versioning,基于万维网的分布式创作和版本控制)是一个可对Web服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。追加方法:PROPFIND(获取属性)、PROPPATCH(修改属性)、MKCOL(创建集合)、COPY(复制资源及属性)、MOVE(移动资源)、LOCK(资源加锁)、UNLOCK(资源解锁),相应的状态码也扩展:102 Processing、207 Multi-Status、422 Unprocessible Entity、423 Locked、424 Failed Dependency、507 Insufficient Storage。
第10章 构建Web内容的技术
动态HTML:指使用客户端脚本语言将静态的HTML内容变成动态的技术的总称。
CGI(Common Gateway Interface,通用网关接口):指Web服务器在接收到客户端发送过来的请求后转发给程序的一组机制。
因Java而普及的Servlet:Servlet是一种能在服务器上创建动态内容的程序,是Web容器或说Servlet容器。
数据发布的格式及语言:XML、RSS/Atom、JSON。
第11章 Web的攻击技术
简单的HTTP协议本身不存在安全性问题,因此协议本身几乎不会成为攻击的对象。应用HTTP协议的服务器和客户端以及运行在服务器上的Web应用等资源才是攻击目标。
针对Web的攻击技术:HTTP不具备必要的安全功能,在客户端即可篡改请求;主动攻击(以服务器为目标,通过直接访问Web应用把攻击代码传入的攻击模式,需要能访问到那些资源,代表为SQL注入攻击和OS命令注入攻击),被动攻击(以服务器为目标,利用全套策略执行攻击代码的攻击模式,不直接对目标Web应用访问发起攻击,代表为跨站脚本攻击和跨站点请求伪造),利用用户的身份攻击企业内部网络。
因输出值转义不完全引发的安全漏洞:
跨站脚本攻击XSS:通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击,可以:利用虚假输入表单片区用户个人信息,利用脚本窃取用户的Cookie值使得被害者在不知情的情况下帮助攻击者发送恶意请求,显示伪造的文章或图片。
SQL注入攻击:针对Web应用使用的数据库通过运行非法的SQL而产生的攻击,可能引发极大的威胁有时直接导致个人信息及机密信息的泄露,可以:非法查看或篡改数据库内的数据库,规避认证,执行和数据库服务器业务关联的程序。
OS命令注入攻击:通过Web应用执行非法的操作系统命令达到攻击的目的,只要能调用Shell函数的地方就有存在被攻击的风险。
HTTP首部注入攻击:攻击者通过在响应首部字段插入换行添加任意响应首部或主体的一种攻击,可以:设置任何Cookie信息、重定向至任意URL、显示任意的主体即HTTP响应截断攻击。
邮件首部注入攻击:攻击者通过向邮件首部To或Subject内任意添加非法内容发起的攻击,利用存在安全漏洞的Web网站可对任意邮件地址发送广告邮件或病毒邮件。
目录遍历攻击:对本无意公开的文件目录通过非法截断其目录路径后达成访问目的的一种攻击,也称路径遍历攻击。
远程文件包含漏洞:当部分脚本内容需要从其他文件读入时攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后就可运行任意脚本的一种攻击,主要是PHP存在的安全漏洞。因设置或设计上的缺陷引发的安全漏洞:
强制浏览安全漏洞:从安置在Web服务器的公开目录爱的文件中浏览那些原本非自愿公开的文件,可能:泄露顾客的个人信息等中啊哟情报、泄露原本需要具有访问权限的用户才可查阅的信息内容、泄露未外连到外界的文件。
不正确的错误消息处理安全漏洞:Web应用的错误信息内包含对攻击者有用的信息,错误信息有:Web应用抛出的错误消息、数据库等系统抛出的错误消息。
开放重定向:一种对指定的任意URL作重定向跳转的功能,开放重定向安全漏洞指重定向URL到某个具有恶意的Web网站。因会话管理疏忽引发的安全漏洞:
会话劫持:攻击者通过某种手段拿到了用户的会话ID并非法使用此会话ID伪装成用户达到攻击的目的。可通过非正规的生成方法推测会话ID、可通过窃听或XSS攻击盗取会话ID、可通过会话固定攻击强行获取会话ID。
会话固定攻击:对以窃取目标会话ID为主动攻击手段的会话劫持而言,会话固定攻击会强制用户使用攻击者指定的会话ID,属于被动攻击。
跨站点请求伪造:攻击者通过设置好的陷阱强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击,可以:利用已通过认证的用户权限更新设定信息等、利用已通过认证的用户权限购买商品、利用已通过认证的用户权限在留言板上发表言论。其他安全漏洞:
密码破解:算出密码突破认证。可通过网络的密码试错(穷举法、字典攻击)或者对已加密密码的破解(指攻击者入侵系统,已获得加密或散列处理的密码数据的情况)(穷举法字典攻击、彩虹表、拿到密钥、加密算法的漏洞)。
点击劫持:利用透明的按钮或链接做成陷阱,覆盖在Web页面智商,然后诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段,也称界面伪装。
DoS攻击(Denial of Service attack):一种让运行中的服务呈停止状态的攻击,两种方式(1)集中利用访问请求造成资源过载、资源用尽的同时,实际上服务也就呈停止状态,即发送大量的合法请求(2)通过攻击安全漏洞使服务停止。
后门程序:开发设置的隐藏入口,可不按正常步骤使用受限功能,通常有3种:开发阶段作为Debug调用的后门程序、开发者为了自身利益植入的后门程序、攻击者通过某种方法设置的后门程序。