Adobe决定在2020年停止支持Flash

Adobe近日宣布,将于2020年停止开发和分发Flash浏览器插件,并且建议内容创作者将Flash内容移植到HTML5、WebGL以及WebAssembly格式。

Flash已经有20年的历史了,人们用它来开发游戏,看视频。随着Adobe的官方声明,饱受争议的Flash逐渐退出了历史舞台,它的一生是否如大众所说的“罪孽深重”呢?

我们先来简单回顾一下Flash的一生。

低带宽时代

九十年代的互联网,由于网速的限制,大部分的网站基本上只有纯文本和简单的图片,基本上不能显示太多的图片和视频。当时主流的多媒体制作软件是Macromedia Director,人们可以用它做一些图片视频,它也是现在Adobe Director的前身。并通过Macromedia Shockwave(现为Adobe Shockware)发布到互联网上,人们可以在装有Shockwave的浏览器上浏览这些多媒体信息。

由于带宽的限制,人们对于图片的使用还是很谨慎的,这样做可以让Shockwave文件小一些,但这样做出来的东西也很一般。那个时候使用的格式都是GIF和JPEG,而这样的格式浪费了大量的存储空间。

这时,FutureWave出品的FutureSplash Animator出现了,它和Macromedia Director很类似,不过它的图片是基于矢量存储的,这些的格式可扩展性都非常强,分辨率也很高,存储空间却很小,这是因为矢量图的生成可以通过cpu做到,而当时网速很慢,cpu处理速度越来越快,这样做真的很聪明。

高速扩张

后来,FutureWave打算卖给Adobe,但被拒绝了,最后Macromedia 收购了这家公司。FutureSplash Animator也重新定名为Macromedia Flash 1.0。它由两部分组成:图形及动画编辑器,媒体播放器。

随着网速的提升,人们开始使用Flash来播放视频。1999年到2005年之间是Flash发展的黄金时期,无论是Java,RealNetworks,QuickTime,Windows Media Player,所有的媒体播放器在装机量上都远不及它。

Macromedia 对Flash 服务的重视和持续投入改进更加促进了它的增长,后期加入的MovieClips也让它从一个媒体创造平台转型成为了一个网络平台。

2005年,Adobe收购了Macromedia之后,继续开发Flash,业务开始涵盖影片、音乐、游戏等诸多领域,许多电脑都已经预装了Flash,而且增加了边下边播的功能,这样用户就可以在文件刚下载时播放视频,Flash也逐渐成为了“行业标准”。

上世纪90年代,大多数的浏览器还不支持css,而Flash的出现,人们可以在浏览器上播放动画,火柴人,爆笑三国,神啊救救我吧,等无数的的视频,对老网民来说,留下了无数的回忆。超高压占比的格式,矢量图,边下边播,节省带宽的格式,也给人们留下了深刻的印象。那个时候,人们可以不用考虑代码实现就可以通过Flash做出一些炫酷的动画。

到了21世纪,Flash的flv容器和vp6 ,vp7视频压缩算法开始出现,边下边播的用户体验也越来越好。

2008年,Flash9 alpha阶段的时候,开始支持as3,运行效率大幅提升,后来正式发布的时候叫Flash cs 3。flash又乘上页游的东风,再次蓬勃发展。大量公司开始通过flash开发出交互效果极其绚丽的网页游戏,并且都通过产品获得了不错的收益。

从事了15年的Flash和HTML相关工作的开发者马鉴认为:

首先,在Flash最为鼎盛的时期,来自Adobe的官方统计,全球有将近200万的Flash开发者,这个群体不同于其他语言的开发者,可以说他们是一个独特的开发者群体,我们可以理解他们才是真正的“Full Stack”工程师,会开发游戏,会制作动画,会创作富媒体应用,甚至很多人还兼修美术,烹饪和刺绣。从2010年Flash开始走下坡路,这些Flash开发者陆续转型,他们成为了后来众多应用和游戏公司的中坚力量,目前市场上大量的Unity,Cocos的手游开发者,Egret Engine社区里近一半的HTML5开发者,甚至是大量的AngularJS和JQueryMobile的开发者,都来自于原来的Flash社区。

其次,Flash开发生态为HTML5标准的进化带来了大量有借鉴价值的范本模型。Adobe通过Flash Professional工具开放了JSFL扩展;支持了JQuery Mobile和WebGL的输出,甚至于矢量绘图的动画都支持CreateJS的导出;Adobe将全球最流行的骨骼动画项目之一DragonBones转给了Egret继续原生和HTML5版本的开发工作;Flex项目的主程成为了Google AngularJS的作者;曾经流行的Flash游戏框架Flixel的作者后来又参与创作了HTML5游戏框架Phaser;被Adobe捐助给Mozilla组织的AVM2虚拟机的源码间接驱动了IonMonkey,SpiderMonkey项目中GC的更新换代和Flash转换HTML5项目Shumway的流行;Adobe的ActionScript3.0的语法方式被Egret Engine团队在HTML5的引擎产品设计上所借鉴;Stage3D项目后续促成了Away3D和Minko等原Flash3D项目完美转型HTML5技术领域。还有很多HTML5相关的视频和音频项目在过去几年的发展中大量的融合了Flash相关的媒体库来提供更多的功能支持,当今大量的HTML5 Video Player都是从原来的Flash领域变换而来。这一切都是Flash技术带给当今HTML5领域的财富。

Flash的前半生无疑是潇洒的。

日渐式微

未抓住移动端的浪潮

业界现在普遍认为,Flash的下拨路是从和苹果的决裂开始的。尤其是乔布斯在2010年发布的一篇《thoughts-on-flash》的文章。乔布斯在里面写下了于Flash的一点看法,说明自己为什么不使用Flash,谈到关于Flash的一些问题,比如开放性,安全性,对于设备续航的影响,不利于触摸屏,等等。

结尾的部分很值得玩味:

We know from painful experience that letting a third party layer of software come between the platform and the developer ultimately results in sub-standard apps and hinders the enhancement and progress of the platform. If developers grow dependent on third party development libraries and tools, they can only take advantage of platform enhancements if and when the third party chooses to adopt the new features. We cannot be at the mercy of a third party deciding if and when they will make our enhancements available to our developers.

苹果从一开始就作为平台级别的绝对掌控者,从一开始就建立了app store这样的封闭系统策略,Flash 作为一个第三方插件,很难进入苹果自己的平台争利。

马鉴表示:

现实是很多人并未看到这些,看到的是当Apple宣布iOS不支持Flash技术开始,大量所谓的“专家”和“专业媒体”将Flash营造成HTML5的头号死敌来营造话题博取业界的更多关注,其实他们并不关心Flash和HTML5为Web领域真正带来了什么,也不关心谁赢谁输,他们唯一关心的就是自己的知名度和访问量。

2007年,第一代iphone正式发布,2008年安卓手机出现,从而拉开了移动互联网的序幕,而Flash慢慢无法跟上潮流,也就失去了这一片宝贵的市场。

频出的安全问题

随着时间的推移,Flash开始走下坡路,也出现了可以替代的解决方案,而Flash在广告中出现的频率越来越多,甚至在恶意软件身上看到它的身影。

烦人的浏览器弹窗,无尽的销售广告,Flash的声誉日渐式微,虽然Flash的开发者会注意这些恶意的内容,但广告是由那些不受监管的第三方提供的,Flash逐渐变成了安全隐患。

由于Flash是运行在浏览器外部的,操作系统和浏览器的安全机制对Flash的限制就小了很多,这样的特性很容易让Flash成为黑客们最爱的工具。

我们可以先大体看一下这些年关于Flash爆出的漏洞情况

图中我们可以看到,2015,2016年几乎是Flash的高危年份。Cve记录在案的总漏洞数为别为329和266个。

而对于攻击方式上来说,黑客最偏爱的是通过执行代码来攻击,总计有819个,其次便是通过堆栈溢出有435个漏洞,接下来的DoS和内存破坏,分别有346和348个。

上图中可以看到,时间跨度上,Flash漏洞在2005年开始初露端倪,经过了将近9年的时间开始在14.,15年大规模的爆发。着实给当时的互联网带来了不小的冲击。

下面来回顾下那些印象深刻的攻击事件:

网站挂马

2009,8月6日消息,上月底曝出的Flash漏洞正成为“挂马”网页的主流攻击目标,360网页防火墙在8月6日当天拦截的网页“挂马”攻击中,针对Flash漏洞攻击的拦截比例达到29.4%,已超越此前对网民危害最大的微软MPEG-2视频漏洞及Office内存破坏漏洞。

当时的北京大学网站、中电网等多家知名网站已被黑客入侵,并利用Flash漏洞为访问者传播木马。

CVE-2012-0779

2012年,国外某实验室出的CVE-2012-0779视频展示了Adobe Flash Player对象类型混淆远程代码执行漏洞(CVE-2012-0779)——Adobe FlashPlayer在实现上存在对象混淆漏洞,通过诱使用户打开电子邮件中的恶意文件,攻击者可利用此漏洞使应用崩溃,执行任意代码。

CVE-2012-1535

2012年,Windows 和 Mac OS X 平台上 Adobe Flash Player 11.3.300.271 之前版本,Linux 平台上 11.2.202.238 之前版本,在实现上存在不明细节漏洞,可允许远程攻击者通过 SWF 内容执行任意代码或造成拒绝服务。

CVE-2013-0634

2013年,病毒以CVE-2013-0634漏洞触发,利用Adobe Flash Player ActionScript 3.0处理正则表达式存在溢出执行恶意代码。

病毒于2012年6月份就开始传播。距离2013年2月7日,Adobe公司发布漏洞补丁,已经过去了半年多的时间。由此可见,通过高危漏洞传播木马的方式并且以新浪博客,qq空间,微博等,作为加密后的木马服务器网址发布站点的途径。

CVE-2014-0497

2014年春节期间,dobe Flash播放器被爆出0Day漏洞(编号:CVE-2014-0497),该漏洞危害Flash 12.0.0.38以及之前的版本。Adobe官方已推出修复补丁。

该漏洞是由于SWF中嵌入AS3代码解析错误。

CVE-2014-8440

2014年,Flash播放器中存在一个高危远程代码执行漏洞,目前正在被攻击者利用进行大规模的攻击,Adobe已紧急发布了一个计划外的安全更新。

据安全厂商F-Secure称,在10月14日Flash发布补丁修复之后,黑客利用Windows、Mac、和Linux系统上的Flash播放器高危漏洞(CVE 2014-8439)进行攻击的形势有所缓和,但没过多久法国的研究员Kafeine又在核恶意软件中发现了Flash播放器的最新漏洞利用程序。这个Flash漏洞正在被用于大规模的攻击中。

由于Flash在处理内存指示器的过程中存在可以被攻击的弱点,所以攻击者可以利用该漏洞在受害者机器上执行任意的代码。攻击者可以精心制作的一个Flash文件,当受害用户观看Flash时,恶意代码便可以控制目标系统。

Adobe把这一漏洞定级为高危。

CVE-2015-0310

2015年,Adobe 已为适用于 Windows、Macintosh 和 Linux 的 Adobe Flash Player 发布了安全更新。 这些更新修复了可导致在 Windows 平台上规避内存随机化缓解的漏洞。

Adobe 收到报告称普遍存在 CVE-2015-0310 漏洞,该漏洞正被用于攻击较早版本的 Flash Player。

CVE-2015-0311

2015年,Adobe公司紧急发布了一个高危漏洞补丁,修复了编号为CVE-2015-0310的安全漏洞。然而一波未平一波又起,在此之前,Adobe又一次更新了Flash Player软件,这次更新的目的是修复被编号为CVE-2015-0311的0day严重漏洞。这个漏洞是由知名安全研究人员Kafeine提交的。

该漏洞正被攻击者广泛的利用中,通过发动强迫下载(drive-by-download)攻击绝大部分Windows系统。该漏洞已被公司标记为了高危,也就意味着攻击者可以执行恶意代码,甚至是在用户完全不知情的情况下。

这个漏洞是Flash长期存在的未公开漏洞,允许攻击者远程获取PC控制权;Windows、OS X及Linux的Flash版本都包含该漏洞。

CVE-2015-0313

2015年,第三个严重的Flash 0day漏洞现身。该漏洞影响Windows、Linux、Mac系统上Adobe Flash Player 16.0.0.296和所有早期版本,可导致攻击者控制目标系统。

这是当时几周内Adobe用户第三次面临0day漏洞带来的安全威胁,该漏洞影响Windows、Linux和Mac OS X系统中的Flash软件。

2015年伊始,Adobe Flash相继爆出多个0day漏洞,且在尚未修复之时就遭到大规模恶意利用。最近趋势科技的安全研究人员在对Adobe 0day漏洞的跟踪调查中,发现了BEDEP系列病毒与Adobe Flash 0day漏洞存在 密切关联。

最严重的两年

2015和2016年爆出的漏洞总数基本上占了历史上Flash漏洞的绝大部分。

由RecordedFuture进行的一项新的研究表明,由于其漏洞,Flash Player继续将全球电脑置于风险当中,网络犯罪分子仍在寻找Adobe解决方案当中安全缺陷,以入侵电脑。今年某漏洞利用套件使用的前10个漏洞中共有6个漏洞来自于Adobe Flash Player,其中一个安全漏洞被7个以上的漏洞利用套件所使用。

在微软发布的安全情报报告20卷中,Flash仍是网络攻击最多的对象。Adobe Flash在被检测到的所有恶意网页中占比90%并不令人感到惊讶。Flash潜在的危险性已经广为人知,并且微软再次强调了定期更新Adobe Flash Player的重要性。

安全机构NTT Group发布的最新报告显示,2015年,漏洞攻击者最钟情的目标已经不再是Java,而是换成了Adobe Flash Player,后者竟然垄断了十个最危险、最经常被利用的漏洞。

光环褪去,人们开始反感Flash,它开始变得死而不僵。

pc端市场的失守

移动端的乏力并不是Flash唯一的问题,在PC方面,Flash也遇到了大麻烦,2015年谷歌旗下的Youtube开始将视频格式全部转为html5,甚至还推出了工具Swiffy,可以将Flash转换成html5.

不仅如此,Google旗下的Chrome占据了浏览器市场上的大部分份额,然而Chrome也慢慢把支持Flash变成非默认的选项,用户一般不会主动打开Flash,只有在遇到需要Flash的网站时,Chrome才会提醒用户需不需要打开它。

而Firefox,Safari这些也占有一定份额的浏览器,也开始站在了Flash的对立面上,Pc端和移动端的双面乏力,加速了Flash的衰亡。

官方标准html5的出现

真正的致命一击还是来自html5,它是最新一代的web标准,用户不需要安装额外的插件就可以访问视频和玩游戏,因为几乎所有的主流浏览器都支持新的html5标准。

html5自身作为web标准,不用使用额外的插件,又不用考虑设备性能的影响,并且一直有人维护,根据以后的发展也会加入更多相应的功能,htnl5很自然而然的开始普及起来。

现状与结论

看似Flash已经毫无用武之地了,那现在(2017年8月)的表现情况,和使用情况又如何呢?

鉴于Flash主要还是在视频播放上占了很大的比重,所以笔者对国内的主流视频网站对Flash的支持程度做了一个测试:

测试结果显示:一线阵营的大视频网站(爱奇艺,腾讯视频,Bilibili,优酷,凤凰视频,乐视视频),由于业务上的高要求和本身的技术积累比较浓厚,基本上摒弃了Flash,转型为html5。

而其他的一些视频网站(搜狐视频,酷6,迅雷看看,新浪视频,百度视频,暴风影音,央视,56,土豆,斗鱼,pptv聚力)暂不支持html5,仍沿用Flash。

最重要的因素可能还是成本上的考量,Flash可以使用P2P技术,可以很好的节省视频网站的流量,算下来还是一笔不小的开支;对比Flash来说,html5的<Video>标签很容易窥探到,视频也更容易被下载;广告层面来说,html5格式下,广告更容易被嵌入,但也更容易被屏蔽,反屏蔽技术对于有技术的大厂来说,有心做肯定可以解决。而对于小厂来说,失去广告这么大的收入,而冒险尝试新的技术,换来的回报却没有那么可观,并且还要分配新技术的预算,大家就都显得不那么情愿了。

关于Flash的现状,近日,在github论坛上出现了为Flash请愿的活动:

Adobe宣布将于2020年停止对Flash的支持,很快GitHub之上出现一则请愿,请求Adobe将Flash开源。芬兰开发者 Juha Lindstedt 在请愿中提到:Flash是互联网历史上重要的一笔,消灭Flash意味着将来的一代就看不到以前的东西了。这样一来,很多游戏、体验和网站就会被遗忘;所以请求Adobe对Flash进行开源或部分开源,这样一来开源社区就能对Flash插件进行支持,或者至少打造可将swf/fla文件转换至HTML5、WebAssembly代码的工具。

可能,这也算是Flash不错的归宿了吧。

在新的浪潮袭来的时候,我们很难逆流而上,就算Flash在巨头的博弈上没有败下阵来,它自身暴露出来的移动端的问题,安全上的问题,性能上的问题,都很难让Flash在崭新的web时代继续称霸,因为人们需要的应该是一个更安全,更便利,功能更强大的web时代。

Flash见证了web从最开始的刀耕火种发展到现在,微信小程序;web app,node.js,日新月异的前端技术。web的未来无疑会有更多可能。Flash作为一种非官方标准,在技术不完善,标准不成熟的时代,承担住了那个时代该有的历史使命,推动了web动态化的发展,在它告别我们的时候,我们应给予它最基本的尊重。

参考链接:

adobe-flash-should be celebrated not derided

thoughts-on-flash

cvedetails

未来是 HTML 5 还是 Flash 的时代?