Dependency check配置本地数据库mysql
标签搜索
侧边栏壁纸
  • 累计撰写 9 篇文章
  • 累计收到 1 条评论

Dependency check配置本地数据库mysql

AiiCi
2024-05-01 / 0 评论 / 4 阅读 / 正在检测是否收录...

一、简介

  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
0

海报

正在生成.....

评论 (0)

取消