《图解HTTP》读书笔记

Posted by Waynerv on

category: 计算机网络

Tags: HTTP 读书笔记

第一章 了解Web及网络基础

关键点:

  1. HTTP协议91年被提出,1999年6月通过RFC 2616正式发布HTTP/1.1版本。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。
  2. TCP/IP的分层管理:分为应用层、传输层、网络层和数据链路层
应用层
预存各类通用的应用服务比如,FTP和 DNS、HTTP 协议等。
传输层
提供处于网络连接中的两台计算机之间的数据传输(处理传输数据的规则)。两个性质不同的协议:TCP和 UDP。
网络层(又名网络互连层)
处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计算机,在众多的选项内选择一条传输路线。
链路层(又名数据链路层,网络接口层)
用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、网络适配器,及光纤等。硬件上的范畴均在链路层的作用范围之内。
  • 发送端传输数据时逐层加上首部信息,接受端接收信息是逐层消去对应首部。
  • IP协议:把数据包传输给指定的位置。通过IP地址、MAC地址确定位置。
  • 路由选择:由各个节点选择下一传输目标,传输前无详细完整路线。
  • TCP协议:3次握手(断开4次握手) TCP3次握手
  • DNS服务:提供域名和IP地址之间的双向查找服务。让客户端根据网址访问指定IP地址。
  • HTTP传输流程: HTTP
  • URI包括URL。举例:
https://www.baidu.com/s?ie=utf-8#wd=markdown

第二章 简单的HTTP协议

  1. 请求必定由客户端发出,而服务器端回复响应
  2. 请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。
  3. 响应报文基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
  4. HTTP是不保存状态的协议:不保留之前的一切请求响应信息,无法根据上次的状态进行本次的请求处理。
  5. HTTP方法:
  6. GET 获取资源,一般不传输实体(主体为空)
  7. POST 传输实体主体(发送表单、删除操作等)
  8. PUT 上传文件,无自带验证,一般不用
  9. DELETE 删除文件,无自带验证,一般不用(用POST代替)
  10. OPTIONS 询问支持的方法
  11. TRACE 追踪路径,一般不用
  12. CONNECT 要求用隧道协议连接代理。SSL、TLS跳过代理直连。
  13. GET与POST区别:
GET在浏览器回退时是无害的,而POST会再次提交请求
GET请求会被浏览器主动缓存,而POST不会,除非手动设置
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
GET请求在URL中传送的参数是有长度限制的,而POST没有限制
GET参数通过URL传递,POST放在Request body中
  1. 为加快请求响 应速度采用:持久连接和管线化
  2. Cookie:服务器端发送Set_Cookie,客户端在后续请求中添加Cookie。

第三章 HTTP报文内的信息

  1. 报文本身是多行数据构成的字符串文本
  2. 请求响应报文结构:请求行、状态行、首部字段
  3. 编码提升传输速率:gzip、Chunked
  4. 多部份对象集合:Content-type
  5. 范围请求:(获取一张图片的指定部分数据)byteranges
  6. 内容协商:ACCEPT等

第四章 返回结果的HTTP状态码

  1. 2XX成功
  2. 200 OK 成功
  3. 204 No Content 成功但无主体返回
  4. 206 Partial Content(对应范围请求)
  5. 3XX重定向
  6. 301 Moved Permanently 永久重定向
  7. 302 Found 临时重定向
  8. 303 See Other 用GET方法定向获取
  9. 304 Not Modified 不满足请求条件
  10. 307 Temporary Redirect 临时重定向,不改变方法
  11. 4XX 客户端错误
  12. 400 Bad Request 请求报文有语法错误
  13. 401 Unauthorized 需要认证
  14. 403 Forbidden 请求被拒绝
  15. 404 Not Found 请求资源不存在(也可能服务器故意拒绝)
  16. 5XX服务器错误
  17. 500 Internal Server Error 服务器故障
  18. 503 Service Unavailable 服务器拥挤或停机暂时无法处理请求
  19. Web应用可设置更改返回的状态码

第五章 与HTTP协作的Web服务器

  1. 单台物理服务器(1个IP地址)可通过虚拟主机运行多个域名。因此HTTP请求必须包含完整URI或主机名。
  2. 代理:中转站,追加写入Via首部信息。部分代理可以缓存服务器资源,代为响应。
  3. 网关:将HTTP协议转化为其他协议通信,数据库或结算系统。WSGI?
  4. 隧道:通过SSL等手段建立客户端与服务器的安全通信。
  5. 资源的缓存:避免多次从源服务器转发资源,减轻负荷。缓存有有效期限。客户端也可缓存。

第六章 HTTP首部

使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。 HTTP首部字段根据实际用途被分为以下4种类型:

1.通用首部字段
请求报文和响应报文两方都会使用的首部。
2.请求首部字段
从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
3.响应首部字段
从服务器端向客户端返回报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
4.实体首部字段
针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。

具体见参考文章:hHTTP/1.1规范定义的47种首部字段

第七章 确保Web安全的HTTPS

  1. HTTP的缺点: >通信使用明文(不加密),内容可能会被窃听

不验证通信方的身份,因此有可能遭遇伪装

无法证明报文的完整性,所以有可能已遭篡改 2. 解决方案: - 通信内容使用密钥加密:先使用非对称密钥(公开私有)传输共享密钥,再使用共享密钥传送报文内容。 - 由第三方公证机构颁发证书验证服务器方身份,浏览器一般内置各大公证机构公开密钥,与证书数字签名核验证书是否有效。 - 通过套接SSL协议,应用层发送数据时会附加一种叫做 MAC(Message Authentication Code)的报文摘要。 MAC 能够查知报文是否遭到篡改, 从而保护报文的完整性。

密钥解决方案 HTTPS通信 流程图解 3. HTTPS的弊端 - 速度慢:增加的通信次数,占用客户端服务器计算能力的加密解密计算 - 费用高:取得有效证书具有一定成本,难以大范围推广。 - 因此一般常用于登录认证、网络购物结算等场景。

第八章 确认访问用户身份的认证

  1. BASIC认证
  2. 将用户ID和密码以Base64方式编码后通过报文发送
  3. 非加密,容易被截取破解,且无法认证注销操作
  4. 不常用
  5. DIGEST认证
  6. 由服务器发送的质询码计算出响应码并用来存放MD5计算后的密码
  7. 安全等级稍高,但仍然不够
  8. 不常用
  9. SSl客户端认证
  10. 客户端必须提前被分发并安装证书,建立HTTPS加密通信,通过证书与密码双因素认证核验身份
  11. 购买证书或维护认证机构成本较高
  12. 不常用(银行U盾)
  13. 基于表单认证
  14. 能够满足Web网站安全使用级别的标准规范几乎不存在,一般有Web应用各自实现基于表单的认证方式。
  15. 使用Cookie来管理session
  16. cookie弊端:明文容易被破解伪造,不适合传递敏感信息
  17. 解决:发放随机SessionID存放于Cookie中,服务器端接收后验证
  18. 通常利用HTTPS通信来进行验证表单的显示和用户输入数据的发送,ID与密码通常放入报文实体,以POST请求发送给服务器
  19. 密码在服务器端的保管
  20. 服务器端如何保管并没有标准化,因此存在不安全因素
  21. 加盐:生成足够长的随机字符串和密码拼接,再计算出散列值后保存。

第九章 基于HTTP的功能追加协议

  1. HTTP的瓶颈:
一条连接上只可发送一个请求。
请求只能从客户端开始:客户端不可以接收除响应以外的指令,服务器无法主动推送。
请求/ 响应首部未经压缩就发送:首部信息越多延迟越大。
发送冗长的首部:每次互相发送相同的首部造成的浪费较多。
可任意选择数据压缩格式:非强制压缩发送。
  1. AJAX
  2. 以XMLHttpRequest的API实现局部Web页面替换加载的通讯手段,++减少响应的数据传输++
  3. Comet
  4. 挂起客户端的请求,有内容更新后再返回响应。但需要持续保持连接,较占用资源
  5. SPDY
  6. 基于HTTP协议的改进
  7. 强制使用SSL通信
  8. 增加SPDY会话层
  9. 实现功能:
多路复用流:通过单一的TCP 连接,可以无限制处理多个HTTP 请
赋予请求优先级:给请求逐个分配优先级顺序,解决因带宽低而导致响应变慢的问题。
压缩HTTP 首部:通信产生的数据包数量和发送的字节数就更少了。
推送功能:支持服务器主动向客户端推送数据的功能,而不必等待客户端的请求。
服务器提示功能:服务器可以主动提示客户端请求所需的资源,可以避免发送不必要的请求。
  • 使用多个域名下资源时表现不佳
  • WebSocket
  • Web 浏览器与Web 服务器之间全双工通信标准
  • 一旦确立WebSocket通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文
  • 主要特点:
推送功能:支持由服务器向客户端推送数据的推送功能。
减少通信量:建立WebSocket连接后持续保持连接状态。由于WebSocket 的首部信息很小,通信量也相应减少。
  • 建立连接方式:先建立HTTP连接,发送发送Upgrade:WebSocket握手请求,响应后开始WebSocket通信。
  • HTTP2.0 -实现方法
技术 协议
压缩SPDY Friendly
多路复用 SPDY
TLS 义务化 Speed+Mobility
协商 Speed+Mobility,Friendly
客户端拉曳/服务器推送 Speed+Mobility
流量控制 SPDY
WebSocket Speed+Mobility

7. WebDAV - 可对Web 服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统

第十章 构建Web内容的技术

  1. HTML和CSS
  2. 通过标签(tag)构建页面
  3. CSS:让文档的结构和设计分离
  4. 动态HTM
  5. 通过调用客户端脚本语言JavaScript对DOM进行操作,实现控制HTML的改变
  6. DOM:使用各种函数将HTML内的元素当作对象操作,如取出指定元素中的字符串,改变指定CSS的属性
<script type="text/javascript">
var content = document.getElementsByTagName('P');
content[2].style.color = '#FF0000';
</script>
  1. Web应用
  2. CGI是指Web 服务器在接收到客户端发送过来的请求后转发给程序的一组机制。在CGI 的作用下,程序会对请求内容做出相应的动作,比如创建HTML等动态内容。
  3. 使用CGI 的程序叫做CGI程序,通常是用Perl、PHP、Ruby和C等编程语言编写而成。(Python中的WSGI)
  4. Servlet:在服务器上直接创建动态内容的程序
  5. 通过XML记录数据
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
  • XML 被设计为传输和存储数据,其焦点是数据的内容。
  • HTML 被设计用来显示数据,其焦点是数据的外观。
  • HTML 旨在显示信息,而 XML 旨在传输信息。
  • 通过JSON记录数据
{"name": "Web Application Security", "num": "TR001"}

第十一章 Web的攻击技术

  1. 运行在服务器上的Web应用是主要攻击目标
  2. HTTP只是传输协议,不具备必要的安全功能,需要通过Web应用自行去实现
  3. 客户端发出的所有请求内容都可以自由变更篡改,在报文内加载攻击代码(因此在设计Web应用时永远不要相信用户)
  4. 以服务器为目标的主动攻击模式:SQL命令注入和OS命令注入,主要攻击服务器上的资源
  5. 以服务器为目标的被动攻击模式:跨站脚本攻击和跨站点请求伪造,主要攻击用户的资源和权限
  6. 因输出值转义不完全引发的安全漏洞 > 从数据库或文件系统、HTML、邮件等输出Web应用处理的数据之际,针对输出做值转义处理是一项至关重要的安全策略。当输出值转义不完全时,会因触发攻击者传入的攻击代码,而给输出对象带来损害。
  7. 跨站脚本攻击
利用虚假输入表单骗取用户个人信息。
利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。
显示伪造的文章或图片。
  • SQL注入攻击
如果在调用SQL语句的方式上存在疏漏,就有可能执行被恶意注入非法SQL语句。
非法查看或篡改数据库内的数据
规避认证
执行和数据库服务器业务关联的程序等
  • OS命令注入攻击
  • HTTP首部注入攻击
设置任何Cookie 信息
重定向至任意URL
显示任意的主体(HTTP 响应截断攻击)
  • 邮件首部注入攻击
通过向邮件首部To 或Subject 内任意添加非法内容发起的攻击
  • 目录遍历攻击
指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。
应该关闭指定对任意文件名的访问权限
  • 远程文件包含漏洞
当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击
  1. 因设置或设计上的缺陷引发的安全漏洞
  2. 强制浏览:通过访问隐蔽的URL直接访问无权限访问的文件
  3. 不正确的错误消息处理:抛出错误信息内容太多,给与攻击者以启发
  4. 开放重定向:向URL指定参数后直接从可信网站跳转至危险网站
  5. 因会话管理疏忽引发的安全漏洞
  6. 会话Session劫持,伪装成已认证用户
通过非正规的生成方法推测会话ID
通过窃听或XSS 攻击盗取会话ID
通过会话固定攻击(Session Fixation)强行获取会话ID
  • 会话固定攻击,伪造服务器发放的SessionID
  • 跨站点请求伪造,通过点击恶意代码利用已通过认证的用户权限进行操作
  • 其他安全漏洞
  • 密码破解:穷举法和字典攻击
对已加密的密码数据的破解:
通过穷举法·字典攻击进行类推
彩虹表
拿到密钥
加密算法的漏洞
  • 点击劫持:利用透明按钮或链接
  • DOS攻击
集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态。
通过攻击安全漏洞使服务停止。
  • 后门程序
开发阶段作为Debug 调用的后门程序
开发者为了自身利益植入的后门程序
攻击者通过某种方法设置的后门程序

注:转载本文,请与作者联系




如果觉得文章对您有价值,请作者喝杯咖啡吧

|
donate qrcode

欢迎通过微信与我联系

wechat qrcode

0 Comments latest

No comments.