[ Security ] WEB安全 ( 四 ) 之HTTP协议的传输安全风险问题

304 阅读5分钟

HTTP 协议

HTTP 的传输

http 协议的传输是以明文的形式进行传输,从浏览器经中间的各种代理服务器,路由器,防火墙和各种网络的设备之后到达服务器,服务器收到请求再发出响应经过各种网络的设备到达浏览器。这整一个过程都是以明文的形式进行传输。

web-http-security-1.png

HTTP 协议的安全风险

明文传输就是在通信的过程中所有的东西都是可见的毫无隐私可言,如果在中间的一些环节,有人恶意地去读取通信信息,那就可能会被窃取一些敏感的信息。而这些就包括最为常见的,用户的账户和密码,或者是银行账号和手机号,只要是在通信中出现了这样的数据就可以被取到。

另一种是会被篡改 http 协议的内容,比如,在一个页面中直接插入了一个广告或者小卡片的,而这里小广告通常不是一个静态的图片,而是一个可能带有恶意注入攻击的链接,只要点击了就可能被攻击了或者是再弹出一些乱七八糟的东西。

当然,这种图片也会做得很有诱惑性,我记得以前在做 H5 的时候就出现过这样的情况,当时用的还是 http 协议,我做的一个 H5 页面经反馈平台得知,我的 H5 页面涉及黄色信息我顿时懵逼,打开页面一看,确实直接就在我的页面上盖了一张"36D"图片。

就大致的画个图是这样的:

web-http-security-2.png

上面的一中是修改了 DOM ,还有一种是修改或者插入脚本,使页面在加载的时候直接跳到了其他的页面上去或者是修改了 header 使得原本用来防御注入攻击的功能失效。

HTTPS 协议

HTTPS 的传输

HTTPS 协议就是在原来的 HTTP 的基础上进行了加密处理,加密的方法就是通过 TLS 。所以,也可以说是基于 TLS 的 HTTP 协议。

web-http-security-3.png

他的原理就是在发送请求之前,会经过 TLS 协议做一层加密,在经过了中间的各种网络环节之后到达了服务器再做解密操作,中间传输的内容相当于密文而不是明文,就没有办法对内容进行篡改。

HTTPS 协议的安全风险

虽然,HTTPS 协议是以密文的形式传输,但如果仅仅只是这个还不够,HTTPS 还可能出现一种攻击叫中间人攻击(Man-in-the-MiddleAttack),简称 MITM 攻击。

以下是 MITM 攻击的流程图:

A 和 B 表示浏览器和服务器的正常通信,从 C 开始就表示中间的请求劫持的情况

web-http-security-4.png

  • C:客户端向服务器请求发送公钥。
  • D:窃听同时转发向服务器请求发送公钥。
  • E:服务器下发公钥被中间人窃听
  • F:中间人原本的公钥记下同时伪造了一个假公钥给到客户端。
  • G:客户端使用了中间人提供的公钥进行加密,再向中间人发起请求
  • H:中间人利用了自己的私钥解开了内容,再利用原来的公钥进行加密

整个环节的关键的是获取到真正的私钥,只要获取到了私钥,就能够在服务器和客户端之前进行窃听和篡改的操作。

可能发生中间人攻击的大致有三类,dns 篡改,这种就是在 dns 解析的时候篡改了指向地址,使原本的目标请求改到其他地方去。第二种是, ARP 欺骗,这一种是发生在局域网的情况下。第三种就是代理服务器,代理服务器的概念很广,它包括常见的 公共wifi 或者一些开发者需要用的 “梯子”,这些都是代理服务器。

实质上就是中间人伪造了双重的身份,在通信的过程中,他对于服务器来说他是一个浏览器,他对于一个浏览器来说它是一个服务器,那么他可以对数据进行加密和解密操作,而通信的内容最后还是泄漏了出去。要解决这样的方法,就需要引入一个信任的机制。

HTTPS 解决方法

解决中间人攻击的方法就是使用证书。证书是由数字证书颁发,浏览器在和服务器进行通信时会验证服务器是否已经取得认可,是的话才会进行通信,流程如下:

web-http-security-5.png

  • A:浏览器向 CA 获取信任名单同时内置在浏览器内。
  • B:服务器向 CA 申请获得数字证书
  • C:CA 验证服务器相关资格,符合条件之后颁发数字证书。
  • D:浏览器请求服务器验证 CA 颁发的数字证书。
  • E:服务器出具数字证书给到浏览器
  • F:浏览器验证通过,发起请求。

总结

现在还是使用 http 协议的 web 应该已经不多了,因为基本上只要是靠谱一点的 web 都已经做了 https 的改造,服务器会做重定向的处理,而 https 的安全防护就是要保证证书私钥不能泄漏,其次是域名的使用权必须保证不能过期也就是还在自己的名下。保证了这两点,传输安全问题基本上是可以避免。

还有一个是也有可能会有安全风险的,数字认证中心认证的服务器必须是安全的,如果给一个存在安全风险的服务器也颁发了证书,那也会有传输的安全风险。