审核程序包相关性是否存在安全漏洞
关于安全审核
根据npm官方docs:
A security audit is an assessment of package dependencies for security vulnerabilities. Security audits help you protect your package's users by enabling you to find and fix known vulnerabilities in dependencies that could cause data loss, service outages, unauthorized access to sensitive information, or other issues.
简单来说就是对package dependencies进行安全漏洞评估以确保已知安全漏洞得到修复。
安全漏洞能否自动修复?
在一定程度上是能的。npm提供了npm audit fix
自动修复程序,能自动将有安全漏洞问题的dependencies更新到目前安全的兼容版本。杯具的是,yarn目前只提供了安全审核yarn audit
,并没有可用的自动修复程序。所以yarn用户需要一些特殊的步骤来实现自动修复。
使用npm修复安全漏洞
使用npm审核修复略为简单,只需运行npm audit fix
就能自动更新有安全漏洞的dependencies。但是,在某些情况下可能需要手动检查与更新。在这种情况下,npm通常会显示如何解决该特定dependency。
使用yarn修复安全漏洞
如前所述,yarn没有类似yarn audit fix
的自动指令。因此,我们必须依靠两种方法:
1. 使用npm来解决
如果您使用的是yarn项目,则运行npm audit fix
将得到以下的error:
npm ERR! code ENOLOCK
npm ERR! audit This command requires an existing lockfile.
npm ERR! audit Try creating one first with: npm i --package-lock-only
npm ERR! audit Original error: loadVirtual requires existing shrinkwrap file
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/andylow/.npm/_logs/2021-04-30T06_22_16_004Z-debug.log
我们可以跟着指示运行npm i --package-lock-only
,这个指令将创建一个package-lock.json
文件。
然后我们可以再次运行npm audit fix
来达成自动修复。
最后,别忘了删除package-lock.json
,因为它与yarn.lock
会发生冲突。
2. 更新使用yarn audit
发现的dependencies
在运行yarn audit
之后,会显示哪些dependencies拥有安全漏洞以及哪个版本已经修复了漏洞。
现在来了棘手的问题。在Project中可能有多个依赖项使用相同的dependency,但是它们可能使用的版本不同。值得庆幸的是,yarn提供了选择性的dependency解决方案。
我们可以用以下的格式在package.json
中定义resolutions:
/* package.json */
{
"resolutions": {
"<package>/**/<dependency>": "<version>"
}
}
假设我们有一个dependency A和dependency B,并且它们都依赖于另一个dependency C。它们的关系由以下结构定义:
.
├── A
| ├── C (3.1.3)
| └── D
├── B
| └── C (1.0.2)
在resolutions
里可以这么写:
/* package.json */
{
"resolutions": {
"A/**/C": "3.1.3",
"B/**/C": "1.0.2"
}
}
Top comments (0)