通过 API 导入

DefectDojo 的 API 支持构建健壮的流水线解决方案,能够自动将新的扫描结果摄取到您的实例中。此类自动化通常有以下几种形式:

  • 每日导入:每天扫描您的环境,然后将扫描结果导入 DefectDojo(类似于我们的连接器功能)
  • CI/CD 流水线:在新代码部署时对其进行扫描,并将结果作为触发操作导入 DefectDojo

这些流水线可以通过直接调用我们的 API /reimport 端点并附加扫描文件来创建,其方式与我们的导入扫描表单非常相似。

DefectDojo 的 API

DefectDojo 的 API 使用 OpenAPI 框架在应用内提供文档。您可以从右上角的用户菜单中的 “API v2 OpenAPI3” 选项访问此文档。

- 该文档可用于测试带有各种参数的 API 调用,并使用您自己用户的 API 令牌来执行。

如果您需要为脚本或其他集成获取 API 令牌,可以在同一菜单下的 API v2 Token 选项中找到相关信息。

image

一般 API 注意事项

  • 尽管我们的 OpenAPI 文档详细说明了每个端点可使用的参数,但它假定读者已经对 DefectDojo 的关键概念(产品层级结构、发现项、去重等)有扎实的理解。
  • 希望搭建一个可用的导入集成,但对 DefectDojo 整体还不太熟悉的用户,应考虑使用我们的通用导入器
  • DefectDojo 的 API 有时可能会创建非预期的数据对象,尤其是在 /import/reimport 端点上使用了“自动创建上下文”选项时。
  • 幸运的是,通过 API 意外删除数据是非常困难的。绝大多数对象只能通过对相应端点发起专门的 DELETE 调用来移除。

关于 /import 和 /reimport 端点的具体说明

/reimport 端点既可用于初次导入,也可用于“重新导入”(即为测试扩展额外的发现项)。您无需先使用 /import 创建一个测试,之后才能使用 /reimport 端点。只要启用了“自动创建上下文”,/reimport 端点就可以创建新的测试、测试活动、产品或产品类型。在几乎所有情况下,通过 API 添加数据时,您都可以只使用 /reimport 端点。

不过,如果您希望流水线始终将每次扫描结果存储为一个独立的测试对象,而不是使用 /reimport 在单个测试对象内处理差异,那么可以改用 /import 端点。这两种方式都是可行的,选择哪个端点取决于您的报告结构,或者您是否需要检查流水线某次独立运行的结果。

使用扫描完成日期(API:scan_date)字段

DefectDojo 支持大量的扫描器报告,但并非所有报告都包含对用户而言最重要的信息。scan_date 字段是一项灵活的智能功能,允许用户设置给定扫描报告的完成日期,并将其应用到所有导入的发现项上。

此字段并非必填,但其默认值为导入日期(即请求被处理并返回成功响应的时间)。

以下是该字段的几种使用情况,以及对测试所产生的结果:

  1. 如果报告设置日期,且导入时设置 scan_date
    • 发现项日期将采用 scan_date 的默认值
  2. 如果报告设置了日期,且导入时设置 scan_date
    • 发现项日期将采用报告设置的日期
  3. 如果报告设置日期,且导入时设置scan_date
    • 发现项日期将采用用户为 scan_date 设置的值
  4. 如果报告设置了日期,且导入时设置scan_date
    • 发现项日期将采用用户为 scan_date 设置的值