风险接受 (Open Source)
风险接受是一种可以应用于发现项的特殊状态,用于正式记录并落实“确认发现项但不立即修复”的决定。
与 DefectDojo Pro 不同,OS 版 DefectDojo 中的风险接受不是独立对象,而是仅与测试活动相关联。因此,它们只能包含所属测试活动中的发现项。如果同一个发现项在 3 个不同测试活动的测试中各出现一次,则需要 3 个不同的风险接受才能完全接受这些发现项。
访问风险接受
风险接受包含的是各测试活动内特定测试的发现项。因此,可以从包含这些发现项所属测试的测试活动中访问它们。

所有单独被风险接受的发现项的完整列表,可在侧边栏“发现项”部分下的“已风险接受的发现项”子菜单中查看。

创建风险接受
当某个发现项被风险接受后,将发生以下情况:
- 该发现项的状态将不再是“活动”,但仍可查询、可生成报告、可审计。
- 该发现项的状态将变更为“风险已接受”。
- 该发现项将不再计入统计指标,但仍会出现在其原始所属的测试中。
发现项可以通过以下两种方式之一被风险接受:手动添加到完整风险接受中,或使用简单风险接受工作流程。
完整风险接受
完整风险接受允许用户在某个测试活动中接受多个发现项的风险,并将它们捆绑为一个单元。如果组织政策要求正式的、有文档记录的风险接受,或者用户希望在风险接受到期后触发某些操作,完整风险接受是最佳选择,因为它记录了内部决策过程,可以作为权威依据。
每个完整风险接受都会附加额外的上下文信息,例如:
- 风险接受的名称。
- 风险接受的所有者。
- 关于如何处理发现项的安全建议和决定。
- 与该建议或决定相关的任何证明材料。
- 关于该建议或决定的详细信息。
- 接受该决定所涉及风险的用户。
- 到期日期。
- 到期后发现项的状态是否会恢复为“活动”。
- 到期后 SLA 是否会重新计时。
到期机制是完整风险接受特有的功能,它使已被风险接受的发现项能够在合适的时间重新被审视。完整风险接受一旦到期,相关发现项将重新设置为活动状态。如果未指定日期,系统将使用“系统设置”页面中的“默认风险接受/默认风险接受到期”日期。
需要注意的是,由于完整风险接受仅限于单个测试活动,因此没有统一的页面可以查看所有完整风险接受。只能在包含相应发现项的测试活动内查看对应的完整风险接受。
如何创建完整风险接受
要创建完整风险接受,请进入测试活动视图,然后点击“风险接受”框中的 + 符号。

然后填写完整风险接受的详细信息,并选择要纳入其中的发现项。已接受的发现项中包含一个下拉列表,列出所有可添加到该风险接受中的发现项。测试活动内的发现项列表将按严重程度降序排列(严重发现项排在最前,低发现项排在最后)。如果某个发现项此前已被风险接受,则不会出现在该下拉列表中。
完成后,该完整风险接受将出现在测试活动视图的“风险接受”框中。
也可以通过点击单个发现项的 ⋮ 三点菜单中的添加风险接受按钮来创建风险接受。

操作完整风险接受
创建完整风险接受后,可以打开它查看已添加的发现项,以及创建时输入的各项详细信息(例如日期、所有者、决定、到期日期等)。
要将某个发现项从完整风险接受中移除,请点击“已接受的发现项”表格中的移除按钮。

完整风险接受的视图底部还有一个表格,列出该测试活动中所有测试的其他发现项。您可以从中选择其他发现项并将其添加到该完整风险接受中。
此外,还提供备注功能,允许用户为完整风险接受添加额外的上下文信息。所有公开备注都会出现在为该完整风险接受生成的任何报告中。标记为私密的备注仅作者本人和超级用户可见,不会包含在报告中。
需要注意的是,如果完整风险接受被整体删除,其中包含的发现项状态将自动恢复为“活动”。
简单风险接受
完整风险接受默认启用,而简单风险接受则必须手动启用,可以在创建资产时启用,也可以在资产的设置中启用。

简单风险接受可以通过以下两种方式之一执行:
- 在测试视图中,从发现项表格中选择一个或多个发现项后,使用出现的批量编辑菜单。

- 点击单个发现项的 ⋮ 三点菜单中的接受风险。

发现项被简单风险接受后,仍会出现在该测试的发现项表格中,但状态将变更为非活动,风险已接受。所有单独被风险接受的发现项的完整列表,可在侧边栏“发现项”部分下的“已风险接受的发现项”子菜单中查看。
如果您对某个发现项执行了简单风险接受,之后又希望将其添加到完整风险接受中,则必须先取消该风险接受,然后才能将其添加到完整风险接受中。
更改风险接受到期日期时
完整风险接受的到期日期可以在创建后随时编辑。DefectDojo 的处理方式取决于该风险接受当前是处于活动状态还是已经到期。
编辑活动状态风险接受的日期
如果风险接受尚未到期——即其到期日期在未来,或刚刚过去但定期到期任务尚未处理——那么编辑日期的过程很简单:
- 新日期将按原样保存。
- 关联的发现项将继续保持风险已接受状态。
- 该风险接受对象将保持活动状态。
将已到期风险接受的日期推后
如果风险接受已经到期——即定期到期任务已经处理了其到期,并且关联的发现项已被重新设置为活动状态——将到期日期编辑为未来的值会触发恢复工作流程:
- 该风险接受将被恢复,不再处于已到期状态。
- 所有关联到该风险接受、且当前处于活动状态的发现项都将被重新接受(恢复为风险已接受/非活动状态)。
- 系统会在所有关联的 Jira 问题上发布一条记录此次恢复操作的评论。
您输入的日期就是最终保存的日期。系统设置风险接受表单默认天数(默认值:180)仅在您未指定具体日期时使用——例如当您使用恢复操作时,该操作会在不编辑到期日期的情况下恢复风险接受,因此会将到期日期设置为“今天 + N 天”。
将日期提前或设置为过去的日期
将到期日期提前到一个仍在未来的日期不会触发任何特殊行为——风险接受保持活动状态,新日期会被保存。
将日期设置为过去的日期时,并不会通过编辑表单立即使风险接受到期;下一次定期到期任务会处理它并应用标准的到期行为。这一点对已到期的风险接受同样适用:过去的日期仍然是您所选择的日期,因此会按原样保存,下一次到期任务运行时会再次使该风险接受失效。
API 暴露的内容
API 使用者可以通过 expiration_date、expiration_date_handled 和 expiration_date_warned 字段观察风险接受对象的到期状态。当且仅当 expiration_date_handled 非空时,风险接受才被视为“已到期”。发生恢复操作时,expiration_date_handled 和 expiration_date_warned 都会被清空为 null,而 expiration_date 则保存您所发送的日期——若未指定日期,则为“今天 + N 天”。
到期和恢复操作也可以直接调用,因此您无需通过编辑 expiration_date 来触发它们:
POST /api/v2/risk_acceptance/{id}/expire/会立即使其到期。如果该风险接受已经到期,则返回400。POST /api/v2/risk_acceptance/{id}/reinstate/会恢复一个已到期的风险接受,并重新接受其覆盖的发现项。如果该风险接受尚未到期,则返回400。发送expiration_date可指定新的有效期;省略该字段则使用“今天 + N 天”。
这两个接口都接受可选的 reason 参数,该参数会连同操作者一起记录为风险接受上的一条备注。两者都要求与编辑风险接受相同的权限。
风险接受最佳实践
作为标准做法,通常建议只单独使用完整风险接受或简单风险接受中的一种,而不是同时使用两者。
例如,如果完整风险接受是默认使用的方式,那么当某个发现项被简单风险接受、却没有相应的完整风险接受包含该发现项时,可能会造成混淆。同样地,如果发现项通常都是通过简单风险接受处理的,而突然将部分发现项添加到完整风险接受中,但大多数其他发现项却没有对应的完整风险接受对象,也可能造成混淆。