77% 的網站使用了至少有 1 個漏洞的 JavaScript 庫

本文做者: Tim Kadlec

編譯:鬍子大哈 javascript

翻譯原文:huziketang.com/blog/posts/…

英文鏈接:77% of sites use at least one vulnerable JavaScript library前端

轉載請註明出處,保留原文連接以及做者信息java

前幾周有一篇文章介紹說有 37% 的網站使用了至少包含 1 個漏洞的 JavaScript 庫。當咱們寫這個報告的時候,裏面提到過,咱們預計實際狀況會比這個還要更糟。react

實際上,要糟的多。jquery

咱們在 Alexa 上的 top 5000 網站上跑了測試,發現數字達到了驚人的 76.6%,76.6% 的網站使用了至少包含 1 個漏洞的庫。若是你對於咱們怎麼作的實驗比較好奇,那就繼續往下看吧。git

測試

爲了作這個測試,咱們抓了 Alexa 上 top 5000 的網站 URL。抓的過程當中發現有不少網站已經訪問不了了,採起的策略是依據排名繼續往下抓,直到夠了 5000 個 URL 爲止。github

每一個 URL 都用 WebPageTest 跑一遍。WebPageTest 在 Chrome 中加載每一個頁面,而且執行一些 JavaScript 腳原本判斷其使用的 JavaScript 庫。web

例如爲了判斷使用的 jQuery 版本,每一個頁面在加載完成之後都會執行下面代碼:數據庫

return jQuery && jQuery.fn && jQuery.fn.jquery複製代碼

包含了檢測是否有下面這些庫:npm

  • 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 感興趣的童鞋,歡迎指點

相關文章
相關標籤/搜索