无法修复包漏洞(svg-sprite-loader)

Unable to fix package vulnerability (svg-sprite-loader)

编辑 3: 不确定这里的要点是什么 - 这是包裹的问题,还是我的问题尝试修复它时正在做。很高兴知道是否有人成功安装了我的 package.json 的依赖项而没有 任何问题

编辑 2: 在另一台机器上安装相同的软件包只会导致 2 个漏洞,但同样,它们似乎无法修复. NPM 这次只推荐人工审核,而不是npm audit fix --forcesvg-sprite-loader 似乎仍然是罪魁祸首。

                                 Manual Review                                  
             Some vulnerabilities require your attention to resolve             
                                                                                
          Visit https://go.npm.me/audit-guide for additional guidance           


  Moderate        Regular Expression Denial of Service in postcss               

  Package         postcss                                                       

  Patched in      >=7.0.36                                                      

  Dependency of   svg-sprite-loader [dev]                                       

  Path            svg-sprite-loader > svg-baker > postcss                       

  More info       https://github.com/advisories/GHSA-566m-qj78-rww5             


  Moderate        Regular Expression Denial of Service in postcss               

  Package         postcss                                                       

  Patched in      >=7.0.36                                                      

  Dependency of   svg-sprite-loader [dev]                                       

  Path            svg-sprite-loader > svg-baker-runtime > svg-baker > postcss

  More info       https://github.com/advisories/GHSA-566m-qj78-rww5

found 2 moderate severity vulnerabilities in 459 scanned packages
  2 vulnerabilities require manual review. See the full report for details.

编辑: 如果有人有建议,我也愿意完全放弃 svg-sprite-loader

运行 npm audit 发现 4 个漏洞并建议强制对 svg-sprite-loader 进行重大更改(将其从 v6 恢复到 v2??)。

这修复了一个漏洞,但其余 3 个漏洞似乎不受建议的 运行 npm audit fix 的影响。我不知道如何修复它。

npm: 8.10.0
Node: 16.14.0
webpack: 5.72.1
svg-sprite-loader: 6.0.11

运行之前的审计报告npm audit fix --force:

postcss  <7.0.36
Severity: moderate
Regular Expression Denial of Service in postcss - https://github.com/advisories/GHSA-566m-qj78-rww5
fix available via `npm audit fix --force`
Will install svg-sprite-loader@2.0.3, which is a breaking change
node_modules/postcss
  svg-baker  >=1.2.5
  Depends on vulnerable versions of postcss
  node_modules/svg-baker
    svg-baker-runtime  >=1.4.0-alpha.10475b37
    Depends on vulnerable versions of svg-baker
    node_modules/svg-baker-runtime
      svg-sprite-loader  >=2.0.4
      Depends on vulnerable versions of svg-baker
      Depends on vulnerable versions of svg-baker-runtime
      node_modules/svg-sprite-loader

4 moderate severity vulnerabilities

npm audit fix --force

后的报告
postcss  <7.0.36
Severity: moderate
Regular Expression Denial of Service in postcss - https://github.com/advisories/GHSA-566m-qj78-rww5
fix available via `npm audit fix`
node_modules/postcss
  svg-baker  >=1.2.5
  Depends on vulnerable versions of postcss
  node_modules/svg-baker
    svg-baker-runtime  >=1.4.0-alpha.10475b37
    Depends on vulnerable versions of svg-baker
    node_modules/svg-baker-runtime

3 moderate severity vulnerabilities

运行 npm audit fix 没有修复那些漏洞,我真的不知道如何处理它们。如果有人看一看可能比我更了解问题,我将不胜感激

**编辑:

package.json 修复前

{
  "name": "vanilla-template",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "html-webpack-plugin": "^5.5.0",
    "svg-sprite-loader": "^6.0.11",
    "webpack": "^5.72.1",
    "webpack-dev-server": "^4.9.0"
  }
}

package.json 修复后

{
  "name": "vanilla-template",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "html-webpack-plugin": "^5.5.0",
    "svg-sprite-loader": "^2.0.3",
    "webpack": "^5.72.1",
    "webpack-dev-server": "^4.9.0"
  }
}

尝试使用这个命令:

npm ci //In your terminal

确保你有 package-lockup-to-date install 此命令与 npm install 类似,不同之处在于它用于自动化环境,例如测试平台、持续集成和部署,或者您希望确保完全安装依赖项的任何情况。通过跳过某些 user-oriented 功能,它可以比常规 npm 安装快得多。它也比常规安装更严格,这可以帮助捕获由大多数 npm 用户的 incrementally-installed 本地环境引起的错误或不一致。

简而言之,使用npm installnpm ci的主要区别是:

• 项目必须具有现有的 package-lock.jsonnpm-shrinkwrap.json

• 如果 package lock 中的依赖项与 package.json 中的依赖项不匹配,npm ci 将退出并出错,而不是更新 package lock.

npm ci 一次只能安装整个项目:不能使用此命令添加单个依赖项。

• 如果 node_modules 已经存在,它将在 npm ci 开始安装之前自动删除。

• 它永远不会写入 package.json 或任何 package-locks:安装基本上已冻结。

如果以上方法没有帮助,请尝试:

npm install //In your terminal

说明:

在全局模式下(即在命令后附加 -g--global),它将当前包上下文(即当前工作目录)安装为全局包。

默认情况下,npm install 将安装在 package.json 中作为依赖项列出的所有模块。

使用 --production flag(或当 NODE_ENV 环境变量设置为生产时),npm 将不会安装 devDependencies 中列出的模块。要在 NODE_ENV 环境变量设置为生产时安装 dependenciesdevDependencies 中列出的所有模块,您可以使用 --production=false.

这是修复漏洞的更好方法。

原因: 您的一个包中存在安全漏洞,它不是直接的顶级依赖项,而是嵌套依赖项。因为,这种嵌套依赖关系很容易受到攻击,导致 npm audit 抛出安全警告。

如果我们以某种方式找到一种方法将这个嵌套依赖项更新为安全版本,所有漏洞都应该得到解决。

为此,我们将使用一个名为 npm-force-resolutions 的包。本包修改package-lock.json强制安装特定版本的传递依赖(dependency of dependency)。

步骤:

  1. 安装为开发依赖 npm i -D npm-force-resolutions

  2. 在 package.json 中添加一个包含要修复的依赖版本的字段 resolutions。您可以从上述咨询中找到安全版本 https://github.com/advisories/GHSA-566m-qj78-rww5。这个 link 有 npm 审计报告吗。

"resolutions": {
    "postcss": "7.0.36"
  }
  1. 然后将 npm-force-resolutions 添加到预安装脚本中。这使得它 运行 每次你 运行 npm install。它修补了 package-lock 文件中的嵌套依赖项。

  2. 现在运行npm audit验证。

found 0 vulnerabilities

您的 package.json 文件应如下所示

{
  "name": "vanilla-template",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "preinstall": "npx npm-force-resolutions"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "html-webpack-plugin": "^5.5.0",
    "svg-sprite-loader": "^6.0.11",
    "webpack": "^5.72.1",
    "webpack-dev-server": "^4.9.0",
    "npm-force-resolutions": "^0.0.10"
  },
  "resolutions": {
    "postcss": "7.0.36"
  }
}

警告:由于嵌套的依赖项被强制更新到较新的版本,因此可能会由于依赖项的重大更改而中断。请验证一次是否一切正常。