Firefox浏览器表单的butterfly加载阻塞

背景

一个礼拜前,在退款维权的业务中,发现这样一个问题: 在某些Firefox浏览器中,表单的butterfly加载阻塞导致功能异常了。

一开始,我们以为是即将发布的修改点导致的问题。

但再三确认本次的修改点后,确定只是改了文案啊! 这…

因此,我们首先怀疑是否线上已经有问题? 经过测试发现,果然,确实是个线上问题。

经过并不算麻烦的自测后,发现问题还不小:

影响范围:所有Firefox版本。
(注意:Firefox略有修复,但未完全解决:30.00+官方版Firefox浏览器; 原因是该版本携带有“附加组件管理器”1.2.3版本这个扩展)

chrome在一个月前也发现过类似问题,不过近期没有类似案例,可能已经在35中修复。

隐藏在Firefox中的Google:safebrowsing是如何工作的?


印象中,页面在Firefox中请求一个JS文件的过程,是这样的

Firefox浏览器表单的butterfly加载阻塞

图中看到了三个步骤:

  1. 页面向Firefox发起一个js的请求;
  2. Firefox判断是否为reload请求或者已在缓冲,if true直接读缓存,返回js文件给页面使用;if false则执行步骤3;
  3. 向阿里CDN请求,获取到js文件,返回js文件给页面使用,并且写入缓冲;

看起来没什么问题,太符合我们的认知了。

直到有一天,发现页面因为js加载阻塞导致页面功能严重受影响。

而且怎么强刷、清理缓存,都无果。

才发现….

原来,页面在Firefox中请求一个JS文件的真正过程,是这样的

这里演示下Google服务正常和异常两种情况:

一. Google服务正常时:

Firefox浏览器表单的butterfly加载阻塞

二. Google服务不正常时:

Firefox浏览器表单的butterfly加载阻塞

图中可以看到多了个本地哈希碰撞和向Google服务发送检测的过程,更多步骤描述如下:

  1. cdn返回js给Firefox后,Firefox先在本地safebrowsing哈希库中执行哈希碰撞;
  2. 碰撞结果为不通过的话,会向Google服务器(safebrowsing.google.com:443)发起检测通知,并进入等待状态;
  3. 此时,页面的直观感受就是js没有请求到,功能异常;
  4. 并且,如果再次请求同一个js文件,首先会查看safebrowsing等待队列;
  5. 如果已在safebrowsing等待队列中,则什么都不做。没错!什么都不做!(这就解释了,为什么强刷,甚至清理缓存后的强刷,都毫无作用)

似乎已经定位到了,问题了


第一: Firefox把我们的js判定为可疑文件(也就是哈希碰撞结果为可疑);
第二: Google服务被墙了, 哎~~

另外:

  1. safebrowsing会对所有静态资源执行哈希碰撞;
  2. 哈希碰撞,只针对静态资源的名称;(也就是说与js文件的文件内容无关)

于是,向Firefox的同学请求帮助


无辜的受害者: “为什么Firefox把我们的js认定为可疑文件?”

Firefox的解释是: “我也不知道为什么啊!”;

Firefox: “因为:Firefox浏览器会从Google下来一份safebrowsing哈希库,这个哈希库会对所有静态资源请求执行哈希碰撞。 因此,具体算法,Firefox方面,其实也是不知道的呢。”

无辜的受害者: “哦! 原来是被检查请求阻塞了呢?那要不你们添加一个阻塞行为的监控吧?”

Firefox: “对啊,对啊,在最新版本:30.00中,我们加了阻塞情况下,只进行本地检查的处理了, 你下载最新的版本就可以了。”

… 几个小时后 …

无辜的受害者: “我下更新到最新版本了,可还是不行呢? ”

Firefox: “要怪就怪gfw吧,为了伪造成是Google自己服务器的问题,而不是国内封锁,现在gfw对Google的封锁采用hold连接,不释放,不重置,一直不返回数据,造成现在火狐以为连接一直在等待数据”

无辜的受害人: “这….”, 尼玛,不是坑爹吗? “好的谢谢, 保持联系”。

因此,又抛出了两个新的问题:

  1. 为什么升级了Firefox还是在本地哈希碰撞中被fail了?
  2. 为什么Firefox已经添加了防阻塞处理,结果却还是被阻塞了?

问题的答案:

  1. Firefox升级是升级了,但是本地哈希库,并没有被更新(因为Google服务调不到啊~); 自测发现哈希库被保存在Firefox的应用程序中,而非个人配置目录中;
  2. Firefox添加了阻塞处理没错,但是gfw似乎做了一件奇葩的事情: gfw对Google的封锁采用hold连接,不释放,不重置,一直不返回数据,造成现在火狐以为连接一直在等待数据; 看来是Firefox的解决方案不够彻底啊;

最后的问题变成:

  1. Firefox没有处理到gfw对Google服务请求采取hold连接的情况;
  2. 没有得到能够让用户一次操作(如更新插件,更新浏览器)就能解决的方案,难以形成终极解决方案。

以后怎么办


首先:考虑到网络安全敏感问题,能拿到Google safebrowsing哈希库算法的可能性几乎不可能;尝试通过hash算法扫描本地代码库的思路不太可行。

看来:还是得靠Firefox那边,能够自己修复这个问题。 后续我们会持续跟进这一类的问题,并就这个问题跟Firefox方面保持反馈和测试结果的同步。

临时解决方案


js的出异常的解决方案是: 修改静态资源文件的文件名(注意如果是js文件必须修改非参数部分如: g.tbcdn.cn/aaa/bbb/ccc/ddd-min.js部分,而非 t=xxxxx.js)

另外:

由于safebrowsing检测的是所有静态资源,目前已发现的出现问题的资源文件类型和解决方案是:

/ Type Solution
1 ajax 修改请求名
2 js, css 修改目录时间戳
3 页面请求 修改参数名或添加时间戳

最后


说多了都是泪, 庆幸本次问题基本只在Firefox中被发现,并且没有大面积爆发。(应该多向chrome团队快速精准解决问题的作风学习呢~)

以后还是需要主动关注浏览器生态圈的动态,避免类似情况发生,以及对某些风险做好提前预防工作, 保证每一个使用Firefox的朋友有一个良好用户体验

特别感谢Firefox的同学积极的帮助! 后续还会继续骚扰!

原创文章,作者:ioued,如若转载,请注明出处:https://www.iamue.com/799/

(0)
iouedioued
上一篇 2014-12-27 20:09
下一篇 2014-12-28 10:17

相关推荐

  • 超全面的移动端尺寸基础知识科普指南

    初涉移动端设计和开发的同学们,基本都会在尺寸问题上纠结好一阵子才能摸到头绪。我也花了很长时间才弄明白,感觉有必要写一篇足够通俗易懂的教程来帮助大家。从原理说起,理清关于尺寸的所有细节。由于是写给初学…

    图形用户界面 2015-08-26
  • Sketch从入门到精通 怎样切图及导出图片尺寸 免费版

    怎样切图及导出图片尺寸 在讲这一章之前,先把上一章提到的布尔运算给大家讲一下(如下图) 这是顶部工具栏区域的一小部分。布尔运算有四种形式,你可以根据你的需求来选择不同的方式。 合并形状 (Union):合并的结果…

    2015-07-03
  • 【技巧分享2期】好的用户界面设计

    21 让界面平滑显示而不要死板地呈现 用户进行操作过程中,界面上的元素会经常出现,隐藏,打开,关闭,放大缩小移位等。给这些元素增加些自然的动画,淡入淡出效果不但美观,也更符合实际,本来元素尺寸位置的变化…

    2015-10-12
  • 有哪些非常有设计感的APP?—国内篇

    小编前语:继上次整理的富有设计感的应用之国外篇后,很多童鞋想了解目前国内比较有设计感的APP有哪些,总有些喜爱玩APP的达人给我们推荐一些应用,小编在这汇总下,供大家欣赏~~ 1.小记 日记软件有很多,这一款很…

    2015-05-22
  • 相当便利的UI交互演示工具

    做为一个移动端的互联网产品设计师,天天心心念的就是如何做出一款款能让用户爱不释手的应用,想来轻松,做起来点点滴滴都是功能、美观和用户体验的契合难题,在一个个经典创意最终拍板前,产品原型及其演示体验,…

    UI设计 2016-06-08
  • 谁说GIF就不是艺术?2014年海外最佳艺术GIF动画作品

    GIF动画与艺术是一对完美的搭配,它们将过去和现在混合起来并配以幽默,通过Photoshop的处理为我们带来了惊艳生动的图画。日前,Tumblr网站评选出了2014年一些最好的数码动画艺术作品。我们从中筛选了一部分,从艺…

    2015-01-08
  • 有哪些非常有设计感的App?—国外篇

    对于一款应用的设计感,不同的人会有不同的观点,比如我们可以从以下几个维度进行比较: 界面:UI 设计精美,界面每一处细节都精雕细琢,展现了 App 的独一无二,有些即使是「无用之美」,下载了也会舍不得删掉。 …

    2015-05-18
  • 一“平”到底

    随着 IOS8 的更新,以及更多 APPLE 产品的出现,扁平化设计已经成为了 UI 类设计的大方向。抛开扁平大战拟物的观点,让我们看看扁平设计之路应该如何越走越远。正好因为这个风格的流行,花瓣上也积累了非常多设计师朋友们的 素材 ,来看看他们都收藏了哪些精致好素材吧。

    2015-01-04
  • 用户故事:UI设计的基石

    在整体设计流程中,用户故事可以说是点亮应用绝对目标的那一点星光。该片文章的作者将给我们讲解为什么哪怕是小范围的采用用户故事也能给整体UI设计流程带来巨大的好处。 一支设计团队坐下来讨论为一家新客户所设计…

    2015-04-26
  • 微信网页设计样式库发布

    微信网页设计样式库发布 为帮助网页开发者实现与微信客户端一致的视觉体验,并降低设计和开发成本,微信团队推出了网页设计样式库:WeUI。 该样式库目前包含 button (按钮)、cell (单元格)、toast (浮层提示)、dial…

    2016-01-24