npm audit 不返回漏洞的问题解决方案

45次阅读
没有评论

问题描述

想要通过在 pre-push 钩子中添加 npm audit 命令来强制开发人员更频繁地更新漏洞。他们认为这样做可以减少 dependabot 的警报次数。然而,虽然 dependabot 仍在向他们的仓库提出 Pull Request (PR),但 npm audit 命令却显示一切正常。根据他的理解,它们都从同一个数据库读取漏洞信息,详情可以参考这篇文章: https://github.blog/2021-10-07-github-advisory-database-now-powers-npm-audit/。那么,为什么 npm audit 不返回漏洞,而 dependabot 却有警报呢?

解决方案

请注意以下操作可能存在版本差异,建议在进行操作前备份项目数据。

方案1

npm audit 命令和 dependabot 是两个不同的工具,虽然它们都涉及漏洞信息,但其机制和数据源有所不同。可能的原因是它们使用了不同的漏洞数据库或更新频率存在差异。

首先,你可以确保项目依赖的漏洞信息是最新的。执行以下步骤:

  1. 打开终端,进入你的项目目录。
  2. 运行以下命令来更新项目依赖的漏洞信息:
    npm update
    npm audit
  3. 检查 npm audit 的输出,确保它显示的漏洞信息是最新的。

如果 npm audit 仍然没有返回漏洞,而 dependabot 有警报,可以尝试方案2。

方案2

如果 npm audit 和 dependabot 确实使用了相同的漏洞数据库,但结果不一致,那么可能是由于它们的扫描触发时机不同。dependabot 可能会在每次推送(Push)后自动触发,而 npm audit 只在手动运行时才会扫描漏洞。

你可以将 npm audit 集成到 pre-push 钩子中,确保在每次推送前都执行漏洞扫描。以下是实现这一目标的步骤:

  1. 打开项目的 package.json 文件。
  2. 找到 “scripts” 部分,如果没有,可以自行添加。
  3. 在 “scripts” 部分中添加一个新的脚本,命名为 “prepush”,内容如下:
    json
    "scripts": {
    "prepush": "npm audit"
    }
  4. 保存 package.json 文件。
  5. 运行以下命令来安装 pre-push 钩子工具:
    npm install --save-dev pre-push
  6. 在项目根目录下创建一个名为 “pre-push” 的文件,没有后缀。
  7. 将以下内容添加到 “pre-push” 文件中:
    bash
    #!/bin/sh
    npm run prepush
  8. 保存 “pre-push” 文件,并确保它具有可执行权限:
    chmod +x pre-push

现在,每次执行推送操作时,都会自动运行 npm audit 进行漏洞扫描。这样可以确保在每次推送前都检查项目的漏洞情况,与 dependabot 的触发时机更接近。

通过以上两个方案,你可以更好地控制漏洞检查的时机和准确性,以便提醒开发人员及时更新漏洞。

正文完