<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          黑客欲用 coa 包掛馬攻擊,不料 npm 發(fā)包規(guī)范沒學(xué)好......

          共 1685字,需瀏覽 4分鐘

           ·

          2021-11-07 11:45

          封面圖:iliched @ www.unsplash.com 。


          1、周下載量 700w+ 的 npm 包 coa 昨晚(2021.11.4)讓大片前端社區(qū)掛了,比如我們受影響的依賴鏈?zhǔn)?老框架 > @svgr/webpack > \@svgr/plugin-svgo > [email protected] > coa。應(yīng)該是被黑客偷了發(fā)布權(quán)限,針對不同的 major 和 mirror 分別發(fā)布帶問題的版本,其新增版本在 preinstall hook 里執(zhí)行 start /B node compile.js & node compile.js



          2、目的是掛馬,但所幸遇到的是笨黑客,掛馬沒成功。安裝依賴時直接報了 Error: Cannot find module 'path/to/compile.js' 的錯誤,驚動了整個前端社區(qū),沒成功的原因是發(fā)布時忘記在 files 里加上 compile.batcompat.js,看到下圖,我直接笑出了聲



          3、大家可能都有這樣的經(jīng)歷。1)本來項目跑地好好的,重裝依賴后就掛了 2)跑了多年的老項目,新建的迭代突然就不能跑了,甚至工具 owner 早就離職了 3)睡一晚起來,發(fā)現(xiàn) ESLint 規(guī)則變了,CI 跑不過了。這里有工具本身升級的問題,同時更大可能的則是三方依賴或其依賴更新引起的問題,還記得之前的 leftpad 事件嗎?還記得 babel 兩天更 8 個 bugfix 版本嗎?


          4、為什么有這個問題?拋開攻擊導(dǎo)致的安全問題,還有 semver 理想和現(xiàn)實(shí)的差距。理想的 semver,是完全遵循 major break-change,mirror feature,bugfix bugfix 的世界,而顯示的 semver,則是 major break-change,mirror break-change,bugfix break-change。造成的影響可大可小,構(gòu)建報錯、CI 報錯、白屏、線上故障都可能發(fā)生


          5、是個問題就有解,社區(qū)已經(jīng)有了不少方案。比如 cnpm 的 bug-versions 可以忽略問題庫,各個包管理都有提供 lock 功能來鎖定整體依賴,package.json 中的 resolutions 配置可以鎖定局部依賴,patch-package 庫可以做代碼級的臨時修復(fù)



          6、此外還有個解法是框架層直接鎖依賴。業(yè)務(wù)代碼的依賴鏈通常是 業(yè)務(wù)代碼 > 框架 > 框架依賴 > 間接依賴,在框架層鎖定所有依賴是比較合適的,并且這個鎖不止鎖直接依賴,也要鎖間接依賴。而 npm 并沒有提供鎖的方案,所以目前社區(qū)流行的方案是把依賴打包來達(dá)到鎖間接依賴的目的


          7、打包分兩種。小型工具可以把自己合依賴一起打包,比如 rollup、rome、vite 等;大型框架通常需要拆包,并且有 node 側(cè)和 browser 側(cè)的依賴需要分開處理,通常會采用打包依賴的方式,比如把 node_modules/foo 編譯到 compiled/foo,比如 next.js、umi


          8、打包后你會發(fā)現(xiàn)依賴其實(shí)沒想象中那么大。比如 webpack 打包后 3M、babel 全家桶打包后 3M、lodash 打包后 93K、axios 打包后 31K


          9、打包依賴最大的好處是讓框架和業(yè)務(wù)項目的安全穩(wěn)定,比如 coa 的這次問題,對于 umi 3 以及內(nèi)部依賴 umi 3 的業(yè)務(wù)框架和業(yè)務(wù)代碼都沒有任何影響。此外還有安裝時 0 peerDependencies 警告、安裝依賴時文件尺寸和數(shù)量下降,安裝速度等提升



          10、同事的總結(jié)是:0 error ?0 warning 0 hijacking,更安全和穩(wěn)定,依賴全鎖定,再也不用擔(dān)心 Babel 深夜發(fā)版,工具十年后依舊可用


          瀏覽 106
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品人伦一区二区三区蜜桃网站 | 久久夜色精品国产噜噜亚洲AV高 | 99精品在线免费视频 | 插入 素芬 无码 | 无码AV在线免费观看 |