安全依赖审计
对某个工程的直接依赖和间接依赖进行安全验证,发现其是否包含潜藏的风险。
何时会进行安全依赖审计
- 技术选型
- 针对目标技术 - 远程审计
- 项目开发
- 针对当前工程 - 本地审计/远程审计(对仓库中的项目进行安全审计 )
如何进行安全依赖审计
npm audit为什么不直接用 npm audit
- 阅读不友好
- 依赖关系不清晰
- 功能不完整
- 无法对远程仓库进行审计 - 无法对工程本身进行审计
- 难以集成
- ai 应用集成:取决于应用是否支持运行命令 - ci/cd 集成:无法定义部署决策逻辑
需求
- 对本地或远程仓库都能进行安全审计
- 对工程本身进行安全审计
- 审计结果中包含清晰的依赖路径
- 审计结果是一个统一格式的 md 文档
- 支持 mcp server
- 更多拓展功能...
MVP 版本实现(minimal value product)
- 实现安全审计功能本身
/**
* 根据项目根目录,审计项目中所有的包(含本身)
* @param projectRoot 项目根目录, 可以是本地目录的绝对路径,也可以是远程仓库的url
* @param savePath 审计结果保存路径,审计结果是一个标准格式的md文档字符串
* @returns 审计结果
*/
export function auditProject(projectRoot: string, savePath: string): string {
// 实现审计逻辑
return "审计结果";
}实现流程
创建工作目录
创建一个临时目录,用于存放执行过程中生成的临时文件; 使用随机字符串+时间戳保证目录的唯一性;
解析工程
解析本地工程目录或远程仓库链接,生成对应的 package.json 文件;
- 分辨是本地仓库还是远端仓库
- 具体是何种远端仓库(gitee/gitlab/github)
- 如何从远程仓库的的链接中分析得到关键信息 owner\repo\default_branch\tag
- 如何获取远程仓库的 package.json
- 其他情况处理
生成 lock 文件
将 package.json 写入临时工作目录同时根据它生成对应的 package-lock.json 文件 如何根据 package.json 生成对应的 lock 文件: npm install --package-lock-only
安全审计
进入到临时工作目录,并执行npm audit 进行安全审计,并将审计结果规格化
- 如何得到审计结果
npm audit --json - 审计结果包含哪些信息:
- severity: https://docs.npmjs.com/about-audit-reports/#severity - source: npm 对漏洞的编号,仅存在于 npm 中的漏洞 - CVE: 漏洞通用编号,可以从https://www.cve.org查到 - CWE: 漏洞类型编号,查看漏洞是如何产生的,会造成什么影响,可以通过 https://https://cwe.mitre.org查到 - CVSS: 漏洞严重性评分
- 规格化目标, 图的 dfs 算法
- 如何获取当前工程的审计结果:npm 的远程 api
- 把工程审计结果汇总到结果中
渲染
将上一步得到的规格化审计结果进行渲染,渲染为标准的 markdown 文档,并保存到结果文件中
- 使用模版引擎,这里是使用 ejs
删除工作目录
将之前的工作目录全部删除
- 套壳成 MCP Server
