2023/03/18

[npm] 解決 npm glob-parent 版本過舊的安全性問題

markdown ### 問題 最近在一個舊的專案採用 webpack 4.x 的版本,最近要修改檔案,要在能正常執行下,想要一併更新一下開發套件版本。 原本環境: - typescript 3.9.5 - ts-loader 7.0.5 - webpack 4.43.0 - webpack-cli 4.9.1 執行 `npm audit fix` 之後,已修正不少套件相依版本,但仍有安全性相依版本的問題,即便依照指令再做一次 fix 的動作仍無法更新修正。
glob-parent  <5.1.2
Severity: high
glob-parent before 5.1.2 vulnerable to Regular Expression Denial of Service in enclosure regex - https://github.com/advisories/GHSA-ww39-953v-wcq6
fix available via `npm audit fix`
node_modules/watchpack-chokidar2/node_modules/glob-parent
  chokidar  1.0.0-rc1 - 2.1.8
  Depends on vulnerable versions of glob-parent
  node_modules/watchpack-chokidar2/node_modules/chokidar
    watchpack-chokidar2  *
    Depends on vulnerable versions of chokidar
    node_modules/watchpack-chokidar2
      watchpack  1.7.2 - 1.7.5
      Depends on vulnerable versions of watchpack-chokidar2
      node_modules/watchpack
        webpack  4.44.0 - 4.46.0
        Depends on vulnerable versions of watchpack
        node_modules/webpack
由於 GitHub 的機器人找出這個安全性問題,而且風險值很高,雖然不更新時,可正確產出結果,但是總是有個風險在。 當然直接升級 webpack v5.x 後,此安全問題可以解決,但是在跑專案時會出錯,以暫時不升版的狀況下,該如何更新版本而不出錯才是當前要解決的問題。
### 解決方法 在 package.json 加上以下 overrides 的覆蓋版本設定,再做 `npm update` 即可 ```json { ... "overrides": { "chokidar": "3.5.3", "glob-parent": "6.0.2" } } ``` 上述版本是有跳大的版號,所以需要注意是否有 break change,再執行專案看看是否能正常運行。 還好,沒有任何錯誤訊息,安全性更新完成! 最後更新完成的版本環境: - typescript 5.0.2 - ts-loader 8.4.0 - webpack 4.46.0 - webpack-cli 4.10.0 p.s. 若使用 webpack v4.x 版本, ts-loader 的版本可升到 8.x (webpack v5.x 搭 ts-loader 9.x 版本) ### 參考連結 - [how to solve this npm glob-parent problem](https://stackoverflow.com/questions/68333071/how-to-solve-this-npm-glob-parent-problem)

沒有留言: