再来说说安全性问题,我们常常在访问 url 的时候,带上一些参数,比如在 app 中,内嵌一些 h5,h5 的参数中需要带上一些识别身份的 token。 如果说、我们没有使用 https,黑客在中间层监听了我们的请求,就能获取到我们的数据,甚至对方万一得到了 token,还能获取更多我们的隐私信息。 这就给重放攻击提供了安全漏洞。
那么防御重放攻击,有什么办法呢? 常用的办法有两种
(1)加随机数保障只被使用一次,但是需要额外空间存储历史使用过的值;
(2)加时间戳,不用额外保存信息,但是需要同步时间,但同步时间并不能达到各种情况下的准确。 总之大概方向就是需要一个参数,来判断是否失效。
为什么 https 保障安全
网上文章很多,这里就不做一一解释了,简单说两点,https 利用非对称加密和对称加密、保障数据安全;利用数字证书做双向身份校验、保障不被钓鱼。
抓包工具为什么能抓取 https
以前知道抓包工具通过一定配置就能抓取到 https 请求,这样一想,那 https 是不是就不安全啊,抓包工具都能拦截到。 首先我们需要先了解它的原理,才能做下一步分析。
抓包工具抓取 https 的原理是利用抓包工具做中间代理人,和客户端建立信任连接以后,再代客户端去向服务端发送和接受请求,达到中间商的效果,这样抓包工具既能看到数据,客户端也能正常使用。
以下是抓包工具抓取 https 的流程(拷贝的他人的总结,也不知道最初是谁写的,因为网上太多同样的了,作者勿怪,无法署名)
客户端向服务器发起HTTPS请求
Charles拦截客户端的请求,伪装成客户端向服务器进行请求
服务器向“客户端”(实际上是Charles)返回服务器的CA证书
Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)
客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)
Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)
服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应
Charles拦截服务器的响应,替换成自己的证书后发送给客户端
至此,连接建立,Charles拿到了 服务器证书的公钥 和 客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了
所以前提是客户端需要选择信任并安装 Charles 的证书,否则抓包工具也无法拦截 https,在互联网上大部分恶意脚本程序,想要抓取用户数据,也大都是和抓包工具一样的工作原理,所以 https 还是比较安全的。
未使用 https ?
记得以前公司还没使用 https 的时候,可能大家都经历过恶心的流量劫持,我们自己在线上环境使用都挺正常的,时不时其他地区的同事会告诉我们说,页面上漂浮了一个按钮,点开就跑到其他地方去了。 甚至说有些注入的代码有问题,导致我们的界面也出现了问题,当时各种研究后,最后的办法就是上 https, 到现在就再也不用担心这个问题了。 现在一些浏览器访问非 https 的页面,都会提示不安全,平时也看得到一些他人的网站都还是没用 https,进去就会报警告。 也如我们发现的重放攻击,这些安全问题确实存在于网络中,甚至无人能避免,所以没用 https 的站点,还是快点升级吧!