重新导入
在 DefectDojo 中创建测试后(无论是提前创建的,还是通过导入扫描文件创建的),都可以为该测试补充新的发现项数据。
例如,假设您有一条 CI/CD 流水线,设计为每天向 DefectDojo 发送一份新报告。与其为流水线的每次“运行”都创建一个新的测试或测试活动,您可以使用重新导入功能,让每份报告都汇入同一个测试。
重新导入:处理流程概述
重新导入数据不会替换测试中的任何旧数据,而是会将传入的扫描文件与测试中现有的扫描数据进行比较,从而做出明智的决策:
- 根据最新文件,哪些漏洞仍然存在?
- 哪些漏洞已不再存在?
- 哪些漏洞此前已解决,但后来又重新出现?
测试会通过导入历史记录跟踪并区分每个扫描版本,方便您随时间查看测试中发现项的变化。

重新导入逻辑:创建、忽略、关闭或重新打开
使用重新导入功能时,DefectDojo 会将传入的扫描数据与现有的扫描数据进行比较,然后按以下方式对测试中的发现项应用变更:
创建发现项
任何未包含在先前导入中的漏洞都会自动作为新的发现项添加到测试中。
忽略已存在的发现项
如果任何传入的发现项与已存在的发现项匹配,传入的发现项会被丢弃,而不会被记录为重复项。这些发现项已经被记录过 - 无需再添加新的发现项对象。测试页面会将这些发现项显示为保持不变。
fix_available 和 fix_version 字段
如果任何传入的发现项与已存在的发现项匹配,系统会检查传入发现项的 fix_available 和 fix_version 字段是否有差异,如有差异则进行更新。这些发现项已经被记录过 - 无需再添加新的发现项对象。测试页面会将这些发现项显示为保持不变。
关闭发现项
如果测试中已存在的某些发现项未出现在传入的报告中,您可以选择自动将这些发现项设置为非活动和已缓解状态(假设这些漏洞自上次导入以来已得到解决)。测试页面会将这些发现项显示为已关闭。
如果您不希望关闭任何旧的发现项,可以在重新导入时禁用此行为:
- 如果使用界面,取消勾选 关闭旧发现项 复选框
- 如果使用 API,将
close_old_findings设置为False(在此端点上,close_old_findings默认值为True)
范围说明: 与导入不同,重新导入在判断要关闭哪些发现项时,永远不会查看测试活动中的其他测试。发现项关闭的范围始终仅限于目标测试。
close_old_findings 功能同样会遵循 service 字段:只有 service 值相同(或均未指定 service 值)的发现项才会被视为可关闭对象。
重新打开发现项
- 如果任何已关闭的发现项在重新导入中再次出现,系统会自动将其重新打开。这里的假设是,尽管此前已缓解,但这些漏洞又再次出现了。测试页面会将这些发现项跟踪为已重新激活。
如果您使用的是无分类功能的扫描器,或者您不希望已关闭的发现项被重新激活,可以在重新导入时禁用此行为:
- 如果使用 API,将 do_not_reactivate 设置为 True
- 如果使用界面,勾选 不要重新激活 复选框
强制活动与强制已验证行为
在重新导入时设置 active=true(界面中为 强制活动)或 verified=true(界面中为 强制已验证)会将相应状态应用到每一个匹配的发现项上,包括那些原本会因已缓解而处于非活动状态的发现项。这与上文描述的重新激活行为相同,只是针对每个传入的发现项做了明确设置。
强制活动和强制已验证不会覆盖那些代表用户或系统对发现项为何不应处于活动状态所做出的明确决定的状态:
| Status | Does Force Active reactivate it? | Why |
|---|---|---|
| 已缓解 / 已关闭 | 是 | 与默认的重新激活行为相同 |
| 风险已接受 | 否 | 该发现项处于非活动状态是因为用户明确接受了风险;重新导入不得悄悄撤销该决定 |
| 重复 | 否 | 该发现项处于非活动状态是因为去重将其标记为另一个发现项的重复项;应保持活动的是原始发现项,而非重复项 |
| 误报 | 否 | 原因与“风险已接受”相同——这是一项明确的分类决定 |
| 超出范围 | 否 | 原因与“风险已接受”相同——这是一项明确的分类决定 |
如果您希望某个“风险已接受”或“重复”的发现项重新变为活动状态,需要先移除风险接受标记或重复标记。仅靠强制活动无法做到这一点。
打开重新导入表单
重新导入发现项表单可在任意测试页面上、⚙️齿轮下拉菜单中访问。

重新导入发现项表单将不会允许您导入不同的扫描类型,也不会允许您更改要上传的发现项的目标位置。如果您想执行这类操作,需要改用导入扫描表单。
使用导入历史记录
给定测试的导入历史记录列在测试页面的测试概览标题下。
该表格将每次导入或重新导入显示为单独一行,包含时间戳,以及分支标签、构建 ID、提交哈希和版本列(如果这些信息已指定)。

操作
此标题表示某次导入/重新导入所执行的操作。
- “已创建 #”表示在此次导入/重新导入时创建的新发现项数量
- “已关闭 #”表示因未出现在传入报告中而被重新导入关闭的发现项数量。
- “保持不变 #”表示未被重新导入更改的活动发现项数量(因为它们同样存在于传入报告中)。
- “已重新激活 #” 表示因传入的重新导入而被重新打开的已关闭发现项数量。
重新导入去重
重新导入使用**重新导入去重**设置来判断传入项是否与现有发现项匹配。这与“同工具去重”和“跨工具去重”是分开的,后两者在发现项已存在之后才会生效。
如果您发现重新导入在仅有微小属性变化时(例如行号偏移)就关闭旧发现项并创建新发现项,请为该工具调整重新导入去重设置,使用忽略这些属性的稳定标识符(例如“工具提供的唯一 ID”)。
对于没有可靠唯一 ID 的工具,DefectDojo Pro 可以直接解决这个问题:启用**位置漂移匹配**后,重新导入会将位置发生变化的发现项——行号偏移、文件重命名、URL 变更或依赖项版本升级——识别为同一个发现项,就地更新并保留其位置历史记录。
通过 API 重新导入 - 特别说明
请注意,/reimport API 端点既可以扩展现有测试(应用本文所述的方法),也可以使用新数据创建新测试 - 无需先调用一次 /import,也无需提前搭建好测试。
要了解有关使用 DefectDojo 创建自动化 CI/CD 流水线的更多信息,请参阅我们的相关指南。