2018年的聖誕節,讓素有IT娛樂圈稱謂的前端圈着實又熱鬧了一把。事件原由是螞蟻金服的開源項目Ant Design 框架(react-ui)的開發者別出心裁地在button組件上埋下了一個在聖誕節當天觸發的「彩蛋」。前端
Ant Design 項目在 9 月 10 日的一個 commit中增長了 button的聖誕彩蛋樣式(見下圖)react
也就是說在此次 commit 後下載或更新此項目的用戶都會在 isChristmas12 月 25 日的 button會自動變成 christmas樣式git
而這樣突如其來的變化,讓諸多開發者「一臉懵逼」。由於 Ant Design 項目自己已經有很是大量的用戶,在 GitHub上有超過 3.7 萬的 Star,而 NPM上也展現每週有超過 30 萬次下載。github
該代碼會在 12 月 25 日當天給全部按鈕添加積雪效果,並增長 Ho Ho Ho! 的瀏覽器默認提示信息。npm
而隨之而來的,是部分開發者的憤怒和指責瀏覽器
也有部分開發者表示理解安全
Ant Design的開發者顯然沒想到這個彩蛋會引發如此的渲染大波,而且以千萬級別的熱點迅速衝上了知乎熱榜第二名。服務器
![clipboard.p
微信
Ant Design 的項目issue也瞬間被點燃框架
項目的開發者也第一時間做了說明而且進行道歉
迴歸理性,事實上,做爲開發者,咱們是打內心應該感謝Ant Design 的開發者們,咱們能夠在github上看到該項目高達38000左右的star,這無疑是全球前端開發者對該項目的承認和確定。正是由於該項目在前端圈中有大量的使用者,才致使事件影響巨大。
然而讓筆者擔心的並不是是這個彩蛋,結合還沒過去多久的被污染的 npm 包event-stream事件(一個著名的 npm 包 event-stream 的做者,將其轉讓給了一個惡意用戶 right9ctrl。這個包每月有超過 150萬 次下載,同時其被 1,600 個其它的 npm 包依賴。),真正應該引發開發者擔心和思考的是什麼?就是如何保障引用第三方模塊的安全。
不少軟件因爲長期使用第三方庫文件,致使了持續的安全問題。而在程序開發設計階段,開發者又常常忽略了第三方庫代碼的漏洞審查,甚至有些資源庫(repositories)直接被信手拈來使用,從根本上就缺少了安全審計。
若是某個庫文件存在漏洞,那麼,大量使用了該庫文件的軟件程序都將面臨安全威脅。
這種場景,在現實世界中已經有了血淋淋的證實:如OpenSSL中出現的心臟滴血漏洞(Heartbleed)、GNU Bash出現的破殼漏洞(Shellshock)和Java中的反序列化漏洞(Deserialization),這些都是實際應用程序中,存在第三方資源庫或應用框架漏洞的典型案例。
Github做爲最大的開源資源庫,它託管着4900萬個公共和私人項目,擁有1800萬用戶。
據其安全負責人Shawn Davenport介紹,Github不對託管代碼進行審查或警告,用戶能夠根據需求使用第三方工具,如Gemnasium、Brakeman和Code Climate等,進行代碼動態或靜態分析。
Davenport說,「不少託管項目都存在安全隱患,咱們只能儘可能保證整個資源庫的安全,同時讓用戶明白他們須要什麼樣的代碼審查工具。從項目角度來講,安全並非開發者的首要責任」。
據Davenport估計,Github上只有少數用戶在使用代碼安全審查工具。
而對於絕大部分開發者而言,閱讀第三方庫的代碼更是很難完成的一件事情,這意味着你要投入巨大的精力,況且對於部分開發者而言,並不具有代碼審查技術能力。
所以,面對這樣的局面,咱們能期望的,更可能是靠開源做者們遵循某種開源精神,至少像聖誕彩蛋事件,是應該能夠避免的。
開源的責任
開源是爲了更好地協做開發出解決用戶需求的軟件
一但一個高複雜度的項目得到了高市佔率,開發者則難以遷移
爲何開源即責任?由於一個好的軟件項目是爲了服務好用戶,選擇開源模式,自己就是選擇了一個爲解決複雜問題提供通用(高市佔率)解決方案的途徑。選擇開源模式,即提升了普及項目的速度,也就提升了你的軟件被更多人依賴的可能。這也就是爲何,開源即責任。當數億臺服務器運行着 Linux 服務的時候,那些躺在 Mailing List 裏的一次次爲哪怕一行代碼的長篇爭論,都讓人無比敬畏。
就像部分開發者對事件的評論同樣,咱們知道也並理解Ant Design 開發者是出於一種好意而埋下的彩蛋,可是做爲Ant Design 的最終使用者,這個彩蛋的開啓與否的決定權應當交到使用者手裏。但願通過此次事件,Ant Design的開發者能從更專業的角度和嚴謹的態度去評估他們每個改動對數以萬計的開發者的影響。
最後
感謝開源,感謝貢獻!願春節沒有彩蛋。
微信掃一掃關注早讀君,天天早晨爲你推送前端知識,度過擠地鐵坐公交的時光。