当前位置: 首页 > news >正文

针对 Python、Java、Go 的依赖树检测实现方案,包含漏洞扫描和依赖关系分析的核心代码与工具链

以下是针对 Python、Java、Go 的依赖树检测实现方案,包含漏洞扫描和依赖关系分析的核心代码与工具链:


  1. Python 依赖树检测
    工具与技术栈
  • 依赖解析:pipdeptreepoetryimportlib.metadata
  • 漏洞库:OSV DatabasePyPI Advisory DB
  • 推荐工具:pip-auditsafety

代码实现

import json 
from pip._internal.metadata import get_environment
from packaging.requirements import Requirementdef build_python_dep_tree():env = get_environment([])dep_tree = {}for dist in env.iter_distributions():pkg = {"name": dist.metadata["Name"], "version": dist.metadata["Version"], "dependencies": []}requires = dist.metadata.get_all("Requires-Dist", [])for req in requires:req_obj = Requirement(req)pkg["dependencies"].append({"name": req_obj.name, "specifier": str(req_obj.specifier)})dep_tree[pkg["name"]] = pkg return dep_tree 示例输出
print(json.dumps(build_python_dep_tree(), indent=2))

漏洞检测

使用pip-audit扫描漏洞
pip install pip-audit 
pip-audit --format json 

  1. Java 依赖树检测
    工具与技术栈
  • 依赖解析:mvn dependency:treeGradle dependencies
  • 漏洞库:NVDOSS Index
  • 推荐工具:OWASP Dependency-CheckSnyk

代码实现

// Maven项目生成依赖树 
mvn dependency:tree -DoutputFile=dependencies.txt// 解析依赖树文件示例(Python处理)
import xml.etree.ElementTree as ETdef parse_maven_dep_tree():tree = ET.parse("pom.xml")root = tree.getroot()deps = {}for dep in root.findall(".//{http://maven.apache.org/POM/4.0.0}dependency"):group = dep.find("groupId").text artifact = dep.find("artifactId").text version = dep.find("version").text deps[f"{group}:{artifact}"] = version return depsprint(parse_maven_dep_tree())

漏洞检测

使用OWASP工具 
dependency-check.sh --project "MyApp" --scan ./target

  1. Go 依赖树检测
    工具与技术栈
  • 依赖解析:go mod graphgo list -m all
  • 漏洞库:Go Vuln DBGitHub Advisory
  • 推荐工具:govulncheckgrype

代码实现

生成JSON格式依赖树
go list -m -json all > go_deps.json 
import jsondef parse_go_dep_tree():with open("go_deps.json") as f:deps = [json.loads(line) for line in f if line.strip()]dep_tree = {}for dep in deps:dep_tree[dep["Path"]] = {"Version": dep.get("Version", ""), "Deps": dep.get("Deps", [])}return dep_treeprint(parse_go_dep_tree())

漏洞检测

使用官方工具
go install golang.org/x/vuln/cmd/govulncheck@latest
govulncheck ./...

  1. 统一漏洞检测方案
    跨语言SBOM生成
使用Syft生成SBOM 
syft packages python:latest -o json > sbom.json 
syft packages maven:my-app -o cyclonedx 

通用漏洞扫描

使用Grype多语言扫描 
grype sbom:./sbom.json

  1. 核心功能对比
    | 语言 | 依赖树工具 | 漏洞库 | 特殊挑战 |
    |--------|---------------------|----------------------|--------------------------|
    | Python | pipdeptree | OSV/PyPI Advisory | 动态导入/二进制包 |
    | Java | mvn dependency:tree | NVD/OSS Index | 嵌套依赖/Classpath冲突 |
    | Go | go mod graph | Go Vuln DB | 最小版本选择/替换指令 |

  1. 高级功能实现
    依赖冲突检测(Python示例)
from collections import defaultdictdef detect_conflicts(dep_tree):version_map = defaultdict(set)for pkg, data in dep_tree.items():version_map[pkg].add(data["version"])return {k: v for k, v in version_map.items() if len(v) > 1}conflicts = detect_conflicts(build_python_dep_tree())
print(f"冲突包: {conflicts}")

依赖路径追踪(Java示例)

// Maven插件追踪依赖路径 
mvn dependency:tree -Dincludes=com.fasterxml.jackson.core:jackson-databind

  1. 企业级方案建议

  2. CI/CD集成:

    # GitHub Actions示例
    - name: Scan Python run: pip-audit -r requirements.txt --format sarif >> report.sarif
    - name: Scan Java uses: OWASP/dependency-check-action@v3 
    
  3. 可视化方案:

    • Python:pipdeptree --graph-output dot | dot -Tpng > deptree.png
    • Java:mvn dependency:tree -DoutputType=dot > deptree.dot

如果需要扩展以下方向,可提供具体实现:

  1. 多语言混合项目的依赖分析
  2. 容器镜像中的依赖检测
  3. 许可证合规性检查集成
http://www.dtcms.com/a/282308.html

相关文章:

  • Chrome紧急更新,谷歌修复正遭活跃利用的关键零日漏洞
  • Java运维之Tomcat升级
  • 【c++深入系列】:万字详解list(附模拟实现的list源码)
  • Android 高通平台修改音频参数效果文件-优化音频效果
  • 如何使用 OpenCV 打开指定摄像头
  • 微服务变更?自动化测试利器Parasoft SOAtest修复快、准、稳!
  • 【微服务】Ocelot微服务网关
  • RL-马尔科夫过程、动态规划
  • 042_封装的实现(属性私有化 / 方法公开)
  • 网络基础10 长途互联--WAN广域网技术
  • fastadmin中ajax弹窗修改文字为英文
  • Taro.getRandomValues() 用法详解
  • 端侧推理软件栈
  • 搜索框的显示与隐藏(展开与收起)
  • 智能工厂生产设备状态检测算法
  • Navicat Premium17.2.8 下载与安装(免费版)
  • 数字万用表是什么?七位半数字万用表/多用表的核心指标应用及技术趋势?
  • 近期学习总结
  • ADS8331手册驱动开发
  • HTML基础知识 二(创建容器和表格)
  • 达梦数据库CASE_SENSITIVE大小写敏感差异比较
  • HTB cap wp
  • 0 - MIT 6.S081 2020 操作系统 实验环境配置
  • 前端性能与可靠性工程:前端韧性工程 - 优雅降级与离线支持
  • Nginx,MD5和Knife4j
  • 使用TIANAI-CAPTCHA进行行为验证码的生成和缓存的二次校验
  • 【后端】.NET Core API框架搭建(6) --配置使用MongoDB
  • 随机链表的复制数据结构oj题(力口138)
  • 数据结构--准备知识
  • 随机链表的复制数据结构oj题(CM11)