一、简介
Dependency Check 是一款开源的静态分析工具,主要用于检测项目中的依赖库是否存在已知的安全漏洞。它是由 OWASP(Open Web Application Security Project)开发和维护的,旨在帮助开发者在构建软件时提前识别和修复安全隐患。以下是 Dependency Check 的一些关键特性和功能:
二、核心功能
安全漏洞检测:
Dependency Check 通过扫描项目的依赖库和插件,检测其中是否包含已知的安全漏洞。它会检查常见的依赖管理系统(如 Maven、Gradle、NPM、Yarn、Composer 等)所引用的库版本,并与已知漏洞数据库进行比对。
漏洞数据库:
工具主要依赖于 National Vulnerability Database (NVD) 和其他来源(如 NPM Advisory、OSS Index 等)来获取漏洞信息。这些数据库包含了大量的已知安全漏洞及其详细信息。
生成报告:
Dependency Check 在扫描完成后生成详细的报告,报告中列出了所有发现的漏洞,风险等级,受影响的组件及其版本,以及解决这些漏洞的建议和链接。
多语言支持:
支持多种编程语言和包管理工具,包括 Java、.NET、Node.js、Python、Ruby、PHP 等,这使得它在不同技术栈的项目中都能使用。
集成与自动化:
可以与 CI/CD 管道集成,自动化依赖库的安全检查。例如,可以通过 Jenkins、GitHub Actions 等工具在构建过程中自动运行 Dependency Check,确保每次构建都不会引入新的漏洞。
三、使用方式
命令行工具:
Dependency Check 提供了一个命令行工具,可以直接在开发环境或 CI 环境中运行。用户可以通过命令行参数指定要扫描的项目路径和其他配置选项。
插件形式:
支持作为插件集成到构建工具中,例如 Maven、Gradle、SBT、Ant 等,使得在构建过程中自动进行安全检查。
REST API:
提供了 REST API,允许用户通过网络请求方式进行扫描和获取报告,适用于需要自定义集成的场景。
优点
- 提前发现漏洞:在开发和构建过程中提前发现并修复依赖库中的安全问题,减少生产环境中漏洞带来的风险。
- 全面的报告:详细的报告帮助开发者快速理解和解决问题。
- 自动化和集成:与各种 CI/CD 工具的良好集成,使安全检查流程自动化,减少手动操作的时间和错误。
例子
运行 Dependency Check 扫描 Maven 项目:
dependency-check --project myProject --scan /path/to/project --format HTML --out report.html
在 Maven 项目中使用 Dependency Check 插件:
<build>
<plugins>
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>6.0.3</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
通过这些功能,Dependency Check 帮助开发团队提升项目的安全性,减少因第三方依赖库漏洞导致的安全事件风险。
四、配置本地数据库
目前支持的数据库包括:h2、mysql、oracle、sql server、postgresQL。这里我们以mysql作为实例讲解!
初始化数据库,执行链接中的脚本即可
https://github.com/jeremylong/DependencyCheck/blob/main/core/src/main/resources/data/initialize_mysql.sql
很重要!需要将mysql的驱动放到 dependency-checklib 目录下,使用下面的脚本即可,它会先进行导入数据库然后再进行检测。
第一次使用去掉-n参数,如果加了-n不会同步数据库
#!/bin/bash
#########################################
# Author: AiiCi #
# Time: 2024-05 #
# description: 依赖单扫描 #
#########################################
DIR="/root/dependency-check/bin" #可执行文件目录
TAGGET="/home/backupJenkins/workspace" #扫描目录
OUTPUT="/root/out_dependency-check" #输出目录
if [ -z $1 ];then
echo -e "\e[31mUSE: $0 ProjectName\e[0m"
exit 1
fi
ls $TAGGET/$1/target/ >/dev/null 2>&1
if [ $? -ne 0 ];then
echo -e "\e[31m$TAGGET/$1/target/ directory not found\e[0m"
exit 1
fi
cd $DIR
./dependency-check.sh --project $1 --disableRetireJS --disableNodeJS -s $TAGGET/$1/target/ --dbDriverName com.mysql.cj.jdbc.Driver --connectionString jdbc:mysql://10.169.140.235:3306/dependencycheck --dbUser dcuser --propertyfile /root/dependency-check/pwd.properties -n -o $OUTPUT/$1 -l info.log
cd - >/dev/null
- dbDriverName:表示数据库的dirver名称
- connectionString:表示连接数据库的字符串,执行初始化脚本后创建的数据库叫dependencycheck
- dbUser:是用户名,初始化的用户名叫 dcuser
- propertyfile:这个参数是表示dcuser 的密码,需要在properties文件中存储,形式是:
- data.password=DC-Pass1337! 这个密码是执行初始化脚本后的默认密码
- -n 表示不同步数据库
如果需要批量执行可以选择下列脚本:
#!/bin/bash
#########################################
# Author: AiiCi #
# Time: 2024-05 #
# description: 依赖全扫描 #
#########################################
DIR="/root/dependency-check/bin" #可执行文件路径
TAGGET="/home/backupJenkins/workspace" #扫描路径
OUTPUT="/root/out_dependency-check" #输出路径
PROJECTS=($(ls $TAGGET|grep -v "tmp")) #项目列表去掉了tmp缓存目录
cd $DIR
for project in "${PROJECTS[@]}"; do
echo -e "\e[32m当前执行项目 $project\e[0m"
./dependency-check.sh --project $project --disableRetireJS --disableNodeJS -s $TAGGET/$project/target/ --dbDriverName com.mysql.cj.jdbc.Driver --connectionString jdbc:mysql://10.169.140.235:3306/dependencycheck --dbUser dcuser --propertyfile /root/dependency-check/pwd.properties -n -o $OUTPUT/$project
done
cd - >/dev/null
《不老骑士》记录片高清在线免费观看:https://www.jgz518.com/xingkong/126983.html
《芸芸众生2024》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/14160.html
哈哈哈,写的太好了https://www.lawjida.com/