依赖安全审计工具

对本地或远程仓库的工程依赖进行安全审计,生成标准化的漏洞报告文档。

  • by zhuabo001
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 zhuabo001/npm-audit-mcp-service

使用说明

安全依赖审计

对某个工程的直接依赖和间接依赖进行安全验证,发现其是否包含潜藏的风险。

何时会进行安全依赖审计

  • 技术选型
    • 针对目标技术
    • 远程审计
  • 项目开发
    • 针对当前工程
    • 本地审计/远程审计(对仓库中的项目进行安全审计 )

如何进行安全依赖审计

npm audit

为什么不直接用 npm audit

  • 阅读不友好
    • 依赖关系不清晰
  • 功能不完整
    • 无法对远程仓库进行审计
    • 无法对工程本身进行审计
  • 难以集成
    • ai 应用集成:取决于应用是否支持运行命令
    • ci/cd 集成:无法定义部署决策逻辑

需求

  • 对本地或远程仓库都能进行安全审计
  • 对工程本身进行安全审计
  • 审计结果中包含清晰的依赖路径
  • 审计结果是一个统一格式的 md 文档
  • 支持 mcp server
  • 更多拓展功能...

MVP 版本实现(minimal value product)

  1. 实现安全审计功能本身
/**
 * 根据项目根目录,审计项目中所有的包(含本身)
 * @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
删除工作目录

将之前的工作目录全部删除

  1. 套壳成 MCP Server