本项目是一个面向 Python 开发者、安全研究员和系统管理员的开源工具,旨在解决 Python 软件供应链构建、依赖关系可视化及漏洞识别的核心需求。通过优化 pip 依赖解析算法,实现了不实际安装软件包即可构建精准供应链的功能,并结合 CVE 漏洞检索与前后端可视化界面,帮助用户全面掌控软件依赖生态的安全性与结构关系。
项目基于前后端分离架构,前端采用 Vue.js + Element UI 实现直观交互,后端通过 Django 提供高效 API 服务,支持关键词搜索、供应链生成、依赖详情查询、漏洞检测等核心功能,为 Python 生态的供应链安全研究与工程实践提供支撑。
- 无需实际安装软件包,基于 pip 依赖解析算法优化实现供应链构建,确保与真实安装环境的依赖关系完全一致。
- 支持指定软件包版本及可选依赖(extra dependencies),生成包含直接依赖与间接依赖的完整供应链网络。
- 以图形化方式展示供应链层级结构,节点颜色区分根节点(橙色)、普通节点(绿色)、含漏洞节点(红色)。
- 支持节点点击交互,查看软件包详情及漏洞信息,直观呈现依赖传播路径。
- 集成 NVD(国家漏洞数据库)接口,实时检索供应链中所有软件包的 CVE 漏洞信息。
- 展示漏洞编号、描述、创建时间、相关链接等关键信息,助力安全风险评估。
- 关键词搜索:通过关键词查询 PyPI 上的软件包,支持模糊匹配与相关性排序。
- 版本查询:获取指定软件包的所有历史版本,方便用户选择目标版本构建供应链。
- 软件包详情:展示软件包的主页、描述、许可证、Stars/Forks 等生态数据。
- 可选依赖查询:列出软件包的所有可选依赖,支持按需构建供应链。
- 框架:Vue.js 3.3.11
- 组件库:Element Plus 2.6.3
- 构建工具:npm 9.8.1
- 运行环境:Node.js v18.18.2
- 布局:Flex 弹性盒模型(响应式设计)
- 语言:Python 3.9.2
- Web 框架:Django 4.2.8
- 核心能力:依赖解析算法优化、RESTful API 设计、CVE 数据爬虫
- 接口测试:Apifox
- 软件包元数据:PyPI 官方 API
- 软件包生态信息:Libraries.io API
- 漏洞数据:NVD(National Vulnerability Database)
-
安装前端依赖:
# 进入前端项目目录 cd frontend npm install
-
安装后端依赖:
# 进入后端项目目录 cd backend pip install -r requirements.txt
-
启动后端服务:
cd backend python manage.py runserver 0.0.0.0:8000 -
启动前端服务:
cd frontend npm run serve -
访问系统: 打开浏览器,输入
http://localhost:8080即可进入系统主页。
- 在主页搜索栏输入关键词(如
boto3),点击搜索进入结果列表。 - 选择目标软件包,跳转至供应链构建页面。
- 选择软件包版本(如
1.34.104)及需要的可选依赖(如PDF)。 - 点击「生成供应链」,页面下方将展示可视化的依赖网络。
- 点击红色节点,左侧面板将显示该软件包的 CVE 漏洞详情,包括编号、描述、修复建议等。
- 点击任意节点,左侧面板将展示软件包的基本信息(主页、许可证、Stars 等)。
supply-chain/
├── frontend/ # 前端项目目录
│ ├── src/
│ │ ├── components/ # 页面组件(搜索、供应链可视化、详情展示等)
│ │ ├── router/ # 路由配置(主页、搜索结果、供应链页面等)
│ │ └── App.vue # 根组件
│ └── package.json # 前端依赖配置
│
├── backend/ # 后端项目目录
│ ├── supply_chain/ # 核心应用(依赖解析、漏洞查询等)
│ │ ├── views.py # 视图函数(API 实现)
│ │ ├── models.py # 数据模型
│ │ └── utils/ # 工具函数(依赖解析算法、CVE 爬虫等)
│ └── manage.py # Django 项目入口
│
└── README.md # 项目说明文档
| 接口名称 | 请求类型 | 功能描述 | 参数 | 响应内容 |
|---|---|---|---|---|
key_search |
GET | 关键词搜索软件包 | keyWord: 搜索关键词 |
软件包列表(名称、描述)、状态码 |
get_version |
GET | 获取软件包所有版本 | name: 软件包名称 |
版本列表、状态码 |
get_extra |
GET | 获取软件包可选依赖 | name: 名称, version: 版本 |
可选依赖列表、状态码 |
supply_chain |
GET | 构建供应链并查询漏洞 | name: 名称, version: 版本, extra: 可选依赖 |
供应链图形数据、漏洞信息、状态码 |
get_project_num |
GET | 获取 PyPI 生态统计数据 | 无 | 项目数、版本数、文件数等 |