随着移动互联网的流行,越来越多的客户端会使用 WIFI 上网,无论是自己搭建的 WIFI 还是咖啡馆或机场的 WIFI 甚至是盗用邻居家的 WIFI。然而,随着越来越多的设备使用 WIFI 上网,普通 HTTP 网站的安全问题就凸显出来了。
想象一下,你在咖啡厅打开一个网页,输入帐号和密码登陆一个使用 HTTP 链接的网站,这时你的帐户和密码可能被人窃取到了。
简单的说,HTTP 连接是更容易被嗅探和遭受中间人攻击。
下面以 Chrome 浏览器为例,介绍一下不同连接的图标代表的意义。
上面这四种图标很容易理解。前两种一个是非加密的 HTTP 连接,一个是加密了的 HTTPS 连接。
后两种都是 HTTPS 连接,但是因为 Mixed Content 或证书设置问题,存在潜在的安全隐患。
带黄色三角的表示在 HTTPS 页面里混入了 HTTP 连接的图片或 CSS 资源。带来的潜在安全隐患就是:
而带红 X 图标的问题就大了,说明可能是 HTTPS 页面里混入了 HTTP 连接的 Javascript 资源。潜在的安全隐患就是:
顺便说一下,关于 cookie 从 HTTP 链接泄露问题,解决办法是使用Secure Cookie。
从上面可以得出结论,即使网站使用了 HTTPS 协议,也未必安全。常见的错误就是出现 Mixed Content 问题。简单的说,就是一个 HTTPS 页面里即存在 HTTP 资源又存在 HTTPS 资源。当然,如果 HTTP 资源是图片或 CSS 危险会小一点,因为受浏览器安全策略影响,即使 CSS 或图片被攻击者篡改了,也做不了什么特别危险的动作,而 Javascript 就不一样了。
想要避免 Mixed Content,就是需要把整个页面内容都使用 HTTPS 连接。所以现在云存储或第三方服务都提供 HTTPS 连接。不提高的说明已经落伍了。
一般通过浏览器上面的图标就可以看出网站是否有 Mixed Content 问题。但是,即使网站显示绿锁图标也不能证明它不存在 Mixed Content。这是因为一些高级浏览器会有Minxed Content Blocking功能,比如 Chrome 和 Firefox 23。 这里有一个例子,其实是很严重的 Mixed Content 漏洞,但是由于浏览器给那个 JS 屏蔽掉了,浏览器就没有显示红 X,而这段 JS 却没有被加载:https://code.csdn.net/CSDN_Code/code_support/issues/451
所以 Chrome Console 是神器,只需要在控制台看 warning 就可以,把被 blocked 和 insecure 的换成 HTTPS 连接。
我们知道 Github 是全站 HTTPS 的,但是 Github 还有一个特性是允许用户通过 Markdown 语法插入站外图片。如果插入的站外图片是 HTTP 的,那么在这个页面上就是会显示 Mixed Content 警告:
为了移除这个黄色的 warning,他们做了一个图片代理。把用户输入的图片地址替换,然后抓取到自己的 HTTPS 服务器上…具体的技术细节请看下面的几个连接: