本文作者: Tim Kadlec
编译:胡子大哈翻译原文:http://huziketang.com/blog/posts/detail?postId=58df725ba58c240ae35bb8dc
英文连接:77% of sites use at least one vulnerable JavaScript library
转载请注明出处,保留原文链接以及作者信息
前几周有一篇文章介绍说有 37% 的网站使用了至少包含 1 个漏洞的 JavaScript 库。当我们写这个报告的时候,里面提到过,我们预计实际情况会比这个还要更糟。
实际上,要糟的多。
我们在 Alexa 上的 top 5000 网站上跑了测试,发现数字达到了惊人的 76.6%,76.6% 的网站使用了至少包含 1 个漏洞的库。如果你对于我们怎么做的实验比较好奇,那就继续往下看吧。
测试
为了做这个测试,我们抓了 Alexa 上 top 5000 的网站 URL。抓的过程中发现有很多网站已经访问不了了,采取的策略是依据排名继续往下抓,直到够了 5000 个 URL 为止。
每个 URL 都用 WebPageTest 跑一遍。WebPageTest 在 Chrome 中加载每个页面,并且执行一些 JavaScript 脚本来判断其使用的 JavaScript 库。
例如为了判断使用的 jQuery 版本,每个页面在加载完成以后都会执行下面代码:
return jQuery && jQuery.fn && jQuery.fn.jquery
包含了检测是否有下面这些库:
jQuery
Handlebars
Mustache
React
Angular
Ember
jQueryUI
YI
Dojo
对于每个检测的版本,都和 Snyk 开源软件漏洞库进行对比,以此来看有多少库包含了已知漏洞。
结果不美丽
正如上面提到的,JavaScript 库的安全问题非常糟糕——并没有华丽的外衣掩藏它。5000 个网站中,有 3831 个(76.6%)使用了至少包含有 1 个漏洞的 JavaScript 库。
比例数字这么高,听起来有点吓人,不过正如原始报告中提的那样,实际情况可能更糟。我们测试了 9 个 JavaScript 库,而可用的 JavaScript 框架和库有成百上千个。所测试的 9 个库是这里面最流行的几个,所以比例数字上应该也不会有很大的跃动,也许和实际情况会有几个点的差异。
再次强调,这里只是针对客户端一侧,测试已知的第三方 JavaScript 库漏洞。不包含服务端一侧和自己编写的 JavaScript 服务。一些新的漏洞都会添加到我们的数据库中,有些可能还没有对外公开。
jQuery
jQuery 毫无疑问是我们测试的里面最流行的一个了,它的流行度是有据可查的,所有受测的 5000 个 URL 中,有 79% 的使用了 jQuery。
尽管 jQuery 并没有什么特别的,但是它这么流行也导致了它也成为众矢之的,研究它漏洞的比较多(有 5 个已知的漏洞,已经在最新版本中修复了)。
如结果所显示的,即便我们只检测 jQuery,也有 75.1% 的网站使用了有漏洞的版本。这很大程度上取决于产品中 jQuery 库使用了多少年。调研的产品中有 17.4% 的 jQuery 库使用超过了 5 年。这与我们上一份报告的结论很吻合:人们并不经常更新库。
最新没有发现漏洞的 jQuery 版本是 3.0.0 版本以上的。对于当前的 jQuery 用户而言,版本变更并不是那么简单的事情,因为升级很可能会引起 bug,需要系统的整体升级。所检测的 jQuery 在 1.x 版本的竟然达到了 79% 之高。虽然说 jQuery 3.0.0 才发布了 1 年左右,但是只有 3.6% 的网站使用了 3.x 版本,这一数字也确实太低了。
下周我们会对 jQuery 进行深入的分析,因为它实在是太流行了,也使得研究它会比较有趣。
jQuery UI
按流行度排的话,下一个就是 jQuery UI 了,受测 URL 中大概占 19.3%。同样地,大多数的 jQuery UI 用户在使用有漏洞的版本,尽管其已经可以进行升级了。受测网站中大概 91% 的 jQuery UI 库都有至少 1 个漏洞。
和 jQuery 一样,很大程度上因为人们不进行升级,有 21% 的网站使用同 1 个 jQuery UI 版本超过 5 年。
Handlebars
受测网站中,Handlebar 占到了 3.4%。 其中的 68% 使用了有漏洞的 Handlebars 版本。
和上面一样,使用新版本的反应滞后是这一现象的罪魁祸首。从数据上来看,Handlebars 新版本的使用还比较流行,Handlebars 的最新版本 4.0.6 我们没有检测,检测的是其前一个版本 4.0.5,可以占到总 Handlebars 使用量的 26.7%。
然而由于它的版本发布的特别缓慢(自从 2015 年 11 月以来只发布了两个小版本),这也导致了这些使用了 Handlebars 的网站,一个版本也用了两年了。整体上,超过 3 年的 Handlebars 版本占到了 40%。
React, Mustache, Angular, YUI and Dojo
React (1.7%), Mustache (1.6%), Angular (1.3%), YUI (0.7%) and Dojo (0.2%) 。受测网站中,这些框架使用的比较少,所以对他们每个个体的分析结论并不可靠。把它们作为整体来分析的话,有漏洞的情况也很普遍,有 56.3% 的版本都是有漏洞的。
我们得出的有用结论
不可否认,调研的结果并不好。我们本来的预计应该是乐观的,谁都不想看到有 77% 的网站都在用有漏洞的库。
需要说明的是,没有一个单一的解决方案可以解决这个问题。相反,需要的是将提高安全意识、使用更好的工具、一套简单可维护的 JavaScript 前端实现方法等相结合(前端包管理工具的使用远不像后端那样普遍)。而这也仅仅是个开始。
但是,正如我们前面所说的,对此依旧满怀信心。第三方 JavaScript 的安全问题是一个可解决的问题,只是比预想的需要更长的时间而已。
由于这份报告的数据敏感性,我们不准备公开原始数据(里面包含了网站列表和易受攻击的网站)。但是如果你网站主,欢迎联系我们查看你的网站是否在这份报告中,以及如果在的话是否在易受攻击列表中。如果你会使用 npm 包,可以使用 Snyk 测试你的网站,也能帮助你发现一些潜在的安全漏洞。
如果本文对你有帮助,欢迎关注我的专栏-前端大哈,定期发布高质量前端文章。
我最近正在写一本《React.js 小书》,对 React.js 感兴趣的童鞋,欢迎指点。