安全 HTTPS Best Practices

hooopo for Shopper+ · 2013年06月23日 · 最后由 tarzansos 回复于 2013年06月26日 · 8159 次阅读
本帖已被设为精华帖!

随着移动互联网的流行,越来越多的客户端会使用WIFI上网,无论是自己搭建的WIFI还是咖啡馆或机场的WIFI甚至是盗用邻居家的WIFI。然而,随着越来越多的设备使用WIFI上网,普通HTTP网站的安全问题就凸显出来了。

想象一下,你在咖啡厅打开一个网页,输入帐号和密码登陆一个使用HTTP链接的网站,这时你的帐户和密码可能被人窃取到了。

为什么要使用HTTPS?

简单的说,HTTP连接是更容易被嗅探和遭受中间人攻击

如何识别HTTPS连接是否安全

下面以Chrome浏览器为例,介绍一下不同连接的图标代表的意义。

  • 普通的HTTP连接:globe
  • 安全的HTTPS连接:green lock
  • 带黄色三角号警告的安全HTTPS连接:yellow warning
  • 存在风险的带红叉HTTPS连接:red x

上面这四种图标很容易理解。前两种一个是非加密的HTTP连接,一个是加密了的HTTPS连接。

后两种都是HTTPS连接,但是因为Mixed Content或证书设置问题,存在潜在的安全隐患。

带黄色三角的表示在HTTPS页面里混入了HTTP连接的图片或CSS资源。带来的潜在安全隐患就是:

  1. 这些图片或CSS可以被中间人篡改影响网站的外观。
  2. 经过非HTTPS连接发送的Cookie可能被获取。

而带红X图标的问题就大了,说明可能是HTTPS页面里混入了HTTP连接的Javascript资源。潜在的安全隐患就是:

  1. 通过HTTP传输的Javascript可能受到中间人攻击,JS内容被篡改之后在页面执行,获取用户输入的敏感信息。
  2. 同样,经过HTTP连接发送的Cookie可以被获取。

顺便说一下,关于cookie从HTTP链接泄露问题,解决办法是使用Secure Cookie

Mixed Content问题

从上面可以得出结论,即使网站使用了HTTPS协议,也未必安全。常见的错误就是出现Mixed Content问题。简单的说,就是一个HTTPS页面里即存在HTTP资源又存在HTTPS资源。当然,如果HTTP资源是图片或CSS危险会小一点,因为受浏览器安全策略影响,即使CSS或图片被攻击者篡改了,也做不了什么特别危险的动作,而Javascript就不一样了。

想要避免Mixed Content,就是需要把整个页面内容都使用HTTPS连接。所以现在云存储或第三方服务都提供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 mixed content blocking

所以Chrome Console是神器,只需要在控制台看warning就可以,把被blocked和insecure的换成HTTPS连接。

How Github Remove Yellow Warning

我们知道Github是全站HTTPS的,但是Github还有一个特性是允许用户通过Markdown语法插入站外图片。如果插入的站外图片是HTTP的,那么在这个页面上就是会显示Mixed Content警告: yello warning

为了移除这个黄色的warning,他们做了一个图片代理。把用户输入的图片地址替换,然后抓取到自己的HTTPS服务器上…具体的技术细节请看下面的几个连接:

相关链接

共收到 20 条回复

受教。。

这个问题至少已经困扰了我一个星期了,而且还没有完全解决。

怎么感觉内容还没写完的?:bowtie: 比如「加快 SSL 加解密速度」这些 http://blog.gslin.org/archives/2013/01/28/3161/%E5%8A%A0%E5%BF%AB-ssl-%E5%8A%A0%E8%A7%A3%E5%AF%86%E9%80%9F%E5%BA%A6/

炮哥的分享总是这么让人受教

github 为站外图片移除那个黄色 warning 是不对的... 假安全=更危险

#4楼 @Los 是的,还有HTTP Strict Transport Security和Cache Control相关的,不过我不熟啊..

#6楼 @luikore 他是把用户作为外链的图片抓到他们的 https://a248.e.akamai.net 静态资源服务器上,这样没有任何问题啊。。是 ·安全.

#8楼 @hooopo 假如客户端图片渲染程序有缓冲区溢出的问题, 光图片就能种木马... warning 是表明有非认证资源, 自动抓到自己服务器上并不算"认证"了这些资源的内容, 保留这个 warning 才对

不是变绿了就安全了, 浏览器出警告是有它道理的... 虽然代抓图片可以避免客户端被设置 cookie, 加强隐私保护...

很想用HTTPS啊,但是效率问题,唉。。。

#9楼 @luikore 这里的“认证资源”就是指是否通过HTTPS传输。不是指内容是否属于网站本身。点一下那个warning图标就可以看到浏览器警告的原因:

与xx 的连接采用 128 位加密技术。但是,此页中包含其他不安全的资源。他人能在传输过程中查看这些资源,攻击者也可以进行修改,从而改变网页的外观。

图片木马是另外一个问题,和客户端有关,X-Content-Type-Options: nosniff 头就可以解决。

@hooopo @luikore 不论是看帖子还是看评论,都受教了! ;)

你以为开了HTTPS就安全了 ?

随便干掉一个CA,就可以伪造证书了,这种事情又不是没发生过。

即便CA是安全的,大部分浏览器还在用TLS/1.0,因为CBC等把block cipher拼成stream cipher的方法以及TLS协议的缺陷,容易被BEAST类攻击轻松搞定,特别是有WebSocket等配合的情况下。升级到TLS/1.2协议才得以避免。

RC4用于HTTP协议就更加悲剧了。

TLS层开启压缩,容易被CRIME类攻击轻松搞定。SPDY还默认启用压缩呢。

TLS renegotiation也是一大安全隐患,各种问题层出不穷,比如 http://haxsys.net/tls.pptx

还有,RSA/ECC以及DH等都是等着被量子算法攻击的。

MD5已经被攻破,SHA-1也存在问题。你的Digest算法,升级到SHA-2/SHA-3了么?

同时,密码学算法实现不当,容易被计时攻击,或者被同一宿主机上的另一个虚拟机攻击。

另外,你保证你的熵值够了么 ...

这些都还只是公开了的安全隐患。NSA手上,黑市里不知道有多少重大问题不为外界所知呢。

在NSA面前,你完全就是透明的。老大哥知道你的一切。根本就不需要入侵。只需要搞定几个交换机把流量复制一份就可以了,你的加密就和没加一个样。

#13楼 @bhuztez 你从哪里得出的结论..开HTTPS只代表传输过程中不被中间人攻击。其他的安全问题照样存在,比如XSS,CSRF什么的。

#14楼 @hooopo 我是说传输层安全

#11楼 @hooopo

nosniff 解决的是挂羊头卖狗肉问题, 但没解决挂羊头卖毒羊肉问题. 在 github 和 http / https 证书非认证 的外站之间, 还是能有中间人的空子.

不过图片资源的隐患已经很小了, 或许是浏览器多虑了...

#13楼 @bhuztez

“软件是不可避免有漏洞的,处于不断修补和升级的过程” 这应该是常识吧。MD5不行了就会有SHA什么的替代。TLS1.0有问题了就有升级版..不能因为这个否定HTTPS..

#13楼 @bhuztez -_- 其实密码学攻击没有直接找管理员套近乎来得快捷有效... 安全手段没有法律手段能保护利益...

#17楼 @hooopo 不是否定HTTPS啊。问题是现在开了和没开,除了防运营商HTTP连接劫持以外没啥用。

能升级有个屁用啊。2003还不知道2004年就公开的问题,现在大部分浏览器都在用TLS/1.0吧,压根就不支持TLS/1.2,你服务端升了,也只能自娱自乐啊。BEAST/CRIME都爆出这么久了,浏览器还不支持TLS/1.2。现在都变成鸡蛋问题了。大部分网站不支持TLS/1.2,浏览器不能不支持TLS/1.0,大部分浏览器只支持TLS/1.0,网站就不能不支持TLS/1.0。

增加了我对Mixed Content的了解,谢谢了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册