图解 HTTP 总结

508 阅读6分钟

ARP 协议

IP 间的通信依赖 MAC 地址,在多台计算机间进行中转时,会采用 ARP 协议:根据通信方 IP 地址反查出对应的 MAC 地址。

TCP/IP

协议的分层管理

TCP/IP 四层模型:应用层,传输层,网络层,数据链路层。

  • 应用层决定了向用户提供应用服务时通信的活动。如:HTTP(超文本传输协议),FTP(文件传输协议),DNS(域名系统)。
  • 传输层提供处于网络连接中的两台计算机之间的数据传输,如:TCP(传输控制协议),UDP(用户数据报协议)。
  • 网络层用来处理网络上流动的数据包。该层规定了通过怎样的传输路线到达对方计算机并传送数据包。(IP)
  • 数据链路层用来处理连接网络的硬件部分。

image.png 通信时,发送端从应用层往下走,接收端从数据链路层往上走。

TCP 三次握手

三次握手是为了确定发送端和接收端具备收发信息的能力。

发送端首先发送一个带有SYN标志的数据包给接收端,接收端收到后,回传一个带有SYN/ACK 标志的数据包表示传达确认信息,然后发送端再回传一个带ACK标志的数据包,握手结束。

image.png

HTTP

请求报文的构成

  • 请求行(请求方法,请求URI,协议版本)
  • 可选的请求首部字段
  • 内容实体

响应报文的构成

  • 状态行(状态码,状态码原因短语,协议版本)
  • 可选的响应首部字段
  • 内容实体

HTTP 1.0 和 1.1 的对比

HTTP 初始版本中,每一次通信都要连接TCP、断开TCP,通信的开销很大,为了解决这个问题,HTTP1.1 提供了持久连接的方法,就是说只要任意一端内有明确提出断开连接,就保持TCP 连接状态。持久连接的好处是减少了重复连接断开TCP的额外开销,减轻了服务器负载,提高了页面的响应速度。持久连接带来了管线化的技术:并行发送多个请求,不需要一个接一个的等待响应了。

状态码

image.png

  • 200 成功
  • 204 成功,但响应报文中不含实体信息。OPTIONS 请求会返回204.
  • 301 永久重定向,首部字段 Location 提示 新的 URI
  • 302 临时重定向,首部字段 Location 提示 新的 URI
  • 304 可使用客户端缓存(其实和重定向没有关系)
  • 400 请求报文中存在语法错误
  • 403 请求被服务端拒绝了,无权限
  • 404 资源未找到
  • 500 服务器错误
  • 503 服务器超负载或停机维护

首部字段

image.png

image.png

image.png

image.png

HTTP 缺点

  1. 通信使用明文,可能会被窃听,解法:通信加密(https)、内容加密
  2. 不验证通信方的身份,可能遭遇伪装,解法:使用证书确定通信方
  3. 无法证明报文完整性,可能会被篡改,解法: SSL提供认证、加密处理、摘要功能。

HTTPS

添加了加密及认证机制的 HTTP 称为 HTTPS。 HTTPS 是在 HTTP 通信接口部分用 SSL 和 TLS 协议代替。

HTTP 的混合加密机制

  1. 服务器把自己的公开密钥登录到第三方数字证书认证机构
  2. 数字证书认证机构用自己的私有密钥向服务器的公开密钥部署数字签名,并颁发公钥证书。
  3. 因为认证机构的公开密钥已经事先植入到浏览器中了,客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开密钥,验证数字签名,确认服务器公开密钥的真实性。
  4. 使用服务器的公开密钥对报文加密后发送。
  5. 服务器使用自己的私有密钥对报文进行解密。

SSL 的缺点

使用 SSL 的时候,处理速度会变慢,一种是通信慢(和 HTTP 相比增加了 SSL 通信),另一种是由于大量消耗 CPU 及内存等资源,处理速度变慢(服务器和客户端都进行加密解密运算,更多的消耗硬件资源,负载增强)。

为什么不一直使用 HTTPS?

因为与纯文本通信相比,加密通信会消耗更多的 CPU 及 内存资源,如果每次通信都加密,会消耗相当多的资源,每台服务器能够处理的请求量就会减少。因此,特别是访问量较多的 web 网站,仅在需要信息隐藏的时候才会加密,节约资源。

Web 攻击

分为主动攻击和被动攻击。

主动攻击指攻击者通过直接访问 web 应用,把攻击代码传入的攻击模式。代表:SQL 注入攻击、OS命令注入攻击。

被动攻击指利用全套策略执行攻击代码的攻击模式,攻击者不直接对Web应用访问发起攻击。代表: XSS跨站脚本攻击,CSRF 跨站点请求伪造。

XSS 跨站脚本攻击

指通过存在安全漏洞的 Web 网站用户的浏览器运行非法的 HTML 标签或 JavaScript 的一种攻击。可能会造成:

  1. 利用虚假输入表单,骗取用户个人信息。
  2. 利用脚本窃取 Cookie 值,被害人在不知情的情况下,帮助攻击者发送恶意请求。
  3. 显示伪造的文章或图片。

SQL 注入攻击

指针对 Web 应用安全的数据库,运行非法 SQL 产生的攻击。可能会造成:

  1. 非法查看或篡改数据库内的数据。
  2. 规避认证。
  3. 执行和数据库服务器业务关联的程序等。

HTTP 首部注入攻击

指攻击者在响应首部字段内插入换行,添加任意响应首部或主体的攻击。可能会造成:

  1. 设置任何Cookie信息。
  2. 重定向至任意URL。
  3. 显示任意的主体。

CSRF 跨站点请求伪造

指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新。可能会造成:

  1. 利用已通过认证的用户权限更新设定信息等
  2. 利用已通过认证的用户权限购买商品
  3. 利用已通过认证的用户权限在留言板上发言等

比如,网站 B 在 用户已经登录 网站 A 的情况下,访问 A,在用户不知情的情况下,对 A 站点进行操作。

解法:

  1. 使用token令牌,用户登录后,服务端将token 在响应头中发送给浏览器,浏览器在每次发请求是,将 token 携带在请求头中,发送给服务端。
  2. 验证HTTP Referer字段:它记录了该HTTP请求所在的地址,表示HTTP请求从那个页面发出的。如果攻击者要实行CSRF攻击,那么他只能在自己的站点构造请求,此时Referer的值就指向黑客自己的网站。但在一些低级浏览器上可以被篡改,所以一般使用token。