关于安全审计

安全审计是对包依赖项进行的安全漏洞评估。安全审计通过使您能够发现和修复依赖项中的已知漏洞来帮助您保护您的包的用户,这些漏洞会导致数据丢失、服务中断、对敏感信息的未经授权访问或其他问题。

使用 npm audit 运行安全审计

注意: npm audit 命令在 npm@6 中可用。要升级,请运行 npm install npm@latest -g

npm audit 命令 将您在包中配置的依赖项的描述提交到您的默认注册表,并请求已知漏洞的报告。 npm audit 检查直接依赖项、devDependencies、bundledDependencies 和 optionalDependencies,但不检查 peerDependencies。

npm audit 在您使用 npm install 安装包时会自动运行。您也可以在您的 本地安装的包 上手动运行 npm audit 来对包进行安全审计并生成依赖项漏洞报告,以及(如果有)建议的补丁。

  1. 在命令行中,通过键入 cd path/to/your-package-name 并按 **Enter** 键来导航到您的包目录。
  2. 确保您的包包含 package.jsonpackage-lock.json 文件。
  3. 键入 npm audit 并按 **Enter** 键。
  4. 查看审计报告,并根据需要运行推荐的命令或进行进一步调查。

解决 EAUDITNOPJSONEAUDITNOLOCK 错误

npm audit 要求包具有 package.jsonpackage-lock.json 文件。

  • 如果您遇到 EAUDITNOPJSON 错误,请按照“创建 package.json 文件”中的步骤创建 package.json 文件。
  • 如果您遇到 EAUDITNOLOCK 错误,请确保您的包具有 package.json 文件,然后通过运行 npm i --package-lock-only 来创建包锁定文件。

审查和处理安全审计报告

运行 npm audit 将生成一份安全漏洞报告,其中包含受影响的包名、漏洞严重程度和描述、路径以及其他信息,以及(如果有)用于应用补丁以解决漏洞的命令。有关审计报告中字段的更多信息,请参阅“关于审计报告”。

发现的安全漏洞以及建议的更新

如果发现安全漏洞并且有更新可用,您可以:

  • 运行 npm audit fix 子命令以自动安装与易受攻击的依赖项兼容的更新。
  • 分别运行推荐的命令以安装易受攻击的依赖项的更新。(某些更新可能是语义版本破坏性更改;有关更多信息,请参阅“SEMVER 警告”。)
Screenshot of command-line audit results with suggested fixes

SEMVER 警告

如果推荐的操作是潜在的破坏性更改(语义版本主要更改),则后面将跟着一个 SEMVER WARNING,其中显示“SEMVER WARNING: Recommended action is a potentially breaking change”。如果具有漏洞的包更改了其 API,您可能需要对包代码进行其他更改。

发现的需要手动审查的安全漏洞

如果发现安全漏洞,但没有补丁可用,审计报告将提供有关漏洞的信息,以便您进一步调查。

Screenshot of command-line audit results requiring a manual review

要解决漏洞,您可以:

检查缓解因素

查看“更多信息”字段中的安全建议以了解缓解因素,这些因素可能允许您在某些情况下继续使用具有漏洞的包。例如,漏洞可能仅在代码在特定操作系统上使用时或在调用特定函数时才会存在。

如果存在修复程序,则更新依赖项

如果存在修复程序,但依赖于具有漏洞的包的包尚未更新以包含修复的版本,您可能需要在依赖包存储库上打开一个拉取或合并请求以使用修复的版本。

  1. 要查找必须更新的包,请检查“路径”字段以了解具有漏洞的包的位置,然后检查依赖于它的包。例如,如果漏洞的路径为 @package-name > dependent-package > package-with-vulnerability,则需要更新 dependent-package
  2. npm 公开注册表 上,找到依赖包并导航到其存储库。有关查找包的更多信息,请参阅“搜索和选择要下载的包”。
  3. 在依赖包存储库中,打开一个拉取或合并请求以将易受攻击的包的版本更新为包含修复程序的版本。
  4. 一旦拉取请求或合并请求被合并,并且软件包已在 npm 公共注册表 中更新,请使用 npm update 更新您的软件包副本。

修复漏洞

如果不存在修复程序,您可能希望在软件包存储库的拉取请求或合并请求中,向软件包维护者建议更改以解决漏洞。

  1. 查看“路径”字段以了解漏洞的位置。
  2. npm 公共注册表 上,找到存在漏洞的软件包。有关查找软件包的更多信息,请参阅“搜索和选择要下载的软件包”。
  3. 在软件包存储库中,打开拉取请求或合并请求以在软件包存储库中进行修复。
  4. 修复程序合并后,软件包已在 npm 公共注册表中更新,请更新依赖于包含修复程序的软件包的软件包副本。

在包或依赖包问题跟踪器中打开一个问题

如果您不想自己修复漏洞或更新依赖的软件包,请在软件包或依赖的软件包问题跟踪器中打开一个问题。

  1. npm 公共注册表 上,找到存在漏洞的软件包或需要更新的依赖的软件包。有关查找软件包的更多信息,请参阅“搜索和选择要下载的软件包”。
  2. 在软件包或依赖的软件包问题跟踪器中,打开一个问题并包含审核报告中的信息,包括“更多信息”字段中的漏洞报告。

未发现安全漏洞

如果未发现任何安全漏洞,则表示在您的软件包依赖项树中未发现具有已知漏洞的软件包。由于咨询数据库可以随时更新,我们建议定期手动运行 npm audit,或将 npm audit 添加到您的持续集成流程中。

Screenshot showing audit report with no vulnerabilities

在软件包安装时关闭 npm audit

安装单个包

要关闭安装单个软件包时的 npm audit,请使用 --no-audit 标志

npm install example-package-name --no-audit

有关更多信息,请参阅 npm-install 命令

安装所有包

要关闭安装所有软件包时的 npm audit,请在用户和全局 npmrc 配置文件中将 audit 设置设置为 false

npm set audit false

有关更多信息,请参阅 npm-config 管理命令npm-config audit 设置