节点参考 (Pro)

注意:Rules Engine 2.0 是 DefectDojo Pro 专属功能。

Rules Engine 2.0 内置了分为四大类的 25 个节点。本页对它们逐一进行说明。

除非另有说明,每个节点都接受一个输入,产生一个名为 out 的输出,并将其收到的每一项都传递给该输出。这一点在你串联多个节点时很重要:一个发现项节点会先修改该发现项,然后再将其向后传递,因此依次排列的多个此类节点都会依次生效。

触发器

每张图中都有且仅有一个触发器,也只有触发器才能启动一次运行。三种触发器都会产生发现项,并且都带有一个范围设置,用来限定它们产生哪些发现项。范围的具体工作方式参见构建规则

发现项事件

trigger.finding

当发现项被创建、更新、关闭或重新打开时运行。

设置默认值说明
事件created触发该规则的发现项变化类型:createdupdatedclosedreopened,或用 any 表示以上四种全部。
范围该规则所考虑的发现项范围。留空表示规则所有者可见的所有发现项。

事件所指定的发现项,在进入图之前会先与范围进行匹配,因此事件决定何时触发,范围决定触发哪些对象。

按计划

trigger.schedule

按照计划扫描范围内的所有发现项。该计划在规则上配置,且只能设置为整刻钟(每 15 分钟)的时间点。

设置默认值说明
范围该规则所考虑的发现项范围。

手动运行

trigger.manual

当你在规则上点击运行时,扫描范围内的所有发现项。

设置默认值说明
范围该规则所考虑的发现项范围。

逻辑

条件判断 / 过滤

filter.if

根据条件,将每一项路由到分支。这是唯一一个拥有两个输出的节点,也是图实现分支的方式。

设置默认值说明
条件每一行由一个路径、一个运算符和一个值组成。参见条件
匹配all是要求所有条件都成立(all),还是只需其中一个成立(any)。

空的条件列表会让所有项都进入真分支。两个分支都是可选的:如果不连接假分支,未通过条件的项就会被直接丢弃。

限制数量

flow.limit

只放行前 N 项,其余全部丢弃。在测试规则时可以用作安全阀,也可以用来限制单次运行最多产生多少个工单或消息。

设置默认值说明
保留前几项100要放行的项目数量。

在单次运行内去重

flow.dedupe_batch

对于同一个键,只保留第一项,之后携带相同键的项一律丢弃。该去重范围限定在单次运行内,因此只在一次执行内部去重,不会跨多次执行去重。

设置默认值说明
键路径finding.hash_code用于判定重复项的字段路径。

一个常见用法是使用 finding.component_name,从而按受影响的组件而不是按发现项逐一通知。

发现项

这些节点会修改发现项。每一次修改都会被追溯到进行该修改的规则、运行和节点,并显示在该发现项的溯源时间线上。

设置严重程度

finding.set_severity

设置严重程度,并据此重新计算 SLA 日期和优先级。

设置选项
严重程度CriticalHighMediumLowInfo

设置字段

finding.set_field

设置某个文本字段,或在其后追加内容、在其前插入内容。

设置默认值说明
字段可选值为 component_namecomponent_versioncvssv3cwedescriptionfile_pathimpactmitigationservicetitle 之一。
模式setsetappendprepend。CVSSv3 向量只能被替换。
要写入的文本内容。支持 {{finding.title}} 这类占位符。

设置状态

finding.set_status

将发现项变更为指定状态。

设置默认值说明
状态activeinactiveverifiedunverifiedfalse_positivemitigatedreopen
备注随状态变更一并记录的可选备注。

添加标签

finding.add_tags

为发现项添加标签,已有标签保持不变。

设置说明
标签用逗号分隔。支持 {{product.name}} 这类占位符,因此你可以用发现项中的数据来打标签。

添加备注

finding.add_note

为发现项添加一条备注。

设置说明
备注备注内容。支持占位符。

设置负责人

finding.set_owners

指定一个组对该发现项负责。

设置说明
负责这些发现项的组。

设置审核人

finding.set_reviewers

将该发现项交由所选用户进行审核。

设置说明
审核人应当审核这些发现项的一位或多位用户。

接受风险

finding.risk_accept

对该发现项进行简单风险接受,或将其加入某条风险接受记录。

设置默认值说明
方式simplesimple 会对该发现项设置简单风险接受;acceptance 会将其加入某条风险接受记录。
已接受开启在选择 simple 时显示。关闭表示取消风险接受。
风险接受在选择 acceptance 时显示。指定要将这些发现项加入哪条风险接受记录。

设置缓解策略

finding.set_mitigation_policy

设置该发现项所依据的整改缓解策略。

设置说明
缓解策略要应用的策略。

更改优先级

finding.set_priority

设置优先级,或对其进行算术调整。此操作会覆盖系统计算出的优先级。

设置默认值说明
操作setsetaddsubtractmultiplydivide
要设置的优先级,或要调整的数值。

设置风险

finding.set_risk

设置风险等级,覆盖系统计算出的结果。

设置选项
风险LowMediumNeeds ActionUrgent

出站节点

出站节点是指会离开 DefectDojo 向外发送内容的节点。在发送任何内容之前,每一个出站节点都会先记录一条投递记录,并且都会遵循该规则所处的模拟正式模式。

其中有几个节点都提供相同的按发现项逐条发送选项。关闭时,节点会发送一条描述整批内容的消息,其中包含严重程度细分和一份数量有上限的发现项列表;开启时,则会按发现项逐条发送消息。

按发现项逐条发送消息的节点,默认在单次运行中发送满 1,000 条后就会停止,并记录一条可见的跳过说明,注明还有多少发现项未被发送。参见配置

当渠道不可用时

出站节点依赖于规则之外的某些资源:Slack 令牌、Microsoft Teams webhook、JIRA 配置、已获得许可的连接器等。当这些资源缺失或被关闭时,该节点就无法工作,而 Rules Engine 2.0 会在三个不同的时刻明确告知这一点,而不是悄无声息地失败:

  • 在节点面板中,不可用的节点在你将其拖到画布上之前,就已经被标注为不可用并说明原因。
  • 在保存时,包含不可用节点的图会被拒绝保存。这正是有人在场、可以另选一个节点的时刻。
  • 在运行时,该次投递会被标记为跳过并附带原因,而不是标记为失败。在 Slack 开启时保存的规则,不应该在有人关闭 Slack 的那天开始报错。诚实的记录方式,就是一条说明“Slack 已关闭”的跳过记录。

创建 JIRA 问题

ticket.jira

为该发现项创建或更新 JIRA 问题。

设置默认值说明
跳过已存在问题的发现项开启对已经存在 JIRA 问题的发现项不做处理。
更新已存在的问题关闭在上面的跳过选项关闭时显示。会推送已存在问题的发现项,从而更新 JIRA 中的内容。

摘要、描述和优先级均来自该产品的 JIRA 配置,而非来自此节点。因此,规则所创建的工单,与通过“推送所有问题”创建的工单完全相同。

创建下游工单

ticket.downstream

通过下游连接器创建或更新工单。

设置默认值说明
问题跟踪系统autoauto 使用分配给该测试活动或产品的问题跟踪系统;mapping 则指定某一个具体的映射。
问题跟踪系统映射在选择 mapping 时显示。指定要推送到哪一个映射。
操作createcreate 表示创建工单,update 表示更新已存在的工单。如果执行更新时并不存在对应工单,则会创建一个。
跳过已有工单的发现项开启对目标映射中已经存在工单的发现项不做处理。

该规则会取代分配设置中的自动推送配置:严重程度和“仅活动”过滤条件不会在此处被再次应用。无论某个发现项的工单最初是如何创建的,只要工单已存在,就会被跳过。

发送 Slack 消息

notify.slack

通过消息连接器发布到 Slack 频道。机器人令牌保存在该连接中;系统设置下的实例级 Slack 设置不会被使用,也不会作为后备方案。

设置默认值说明
连接该类型的消息连接器。必填。
目的地在选定连接后显示。具体字段取决于该连接所使用的供应商。
按发现项逐条发送关闭关闭时,会针对整批内容发送一条消息。
消息内容{{finding.severity}}: {{finding.title}} ({{product.name}})按发现项逐条渲染。
摘要中列出的发现项数量10用于批量消息。指消息中列出多少条发现项后,再说明还有多少条未列出。

发送 Microsoft Teams 消息

notify.msteams

通过消息连接器发布一张卡片。Power Automate 工作流的 URL 保存在该连接中;系统设置下的实例级 Teams webhook 不会被使用,也不会作为后备方案。

设置默认值说明
连接该类型的消息连接器。必填。
目的地在选定连接后显示。具体字段取决于该连接所使用的供应商。
按发现项逐条发送关闭关闭时,会针对整批内容发送一张卡片。
消息内容{{finding.severity}}: {{finding.title}} ({{product.name}})按发现项逐条渲染。
摘要中列出的发现项数量10用于批量消息。

发送电子邮件

notify.email

通过消息连接器向一组固定的地址发送电子邮件。收件人即该连接的目的地。

设置默认值说明
连接该类型的消息连接器。必填。
目的地在选定连接后显示。具体字段取决于该连接所使用的供应商。

| 主题 | [DefectDojo] {{ctx.count}} finding(s) from rule {{ctx.rule_name}} | 每条消息渲染一次。 | | 正文 | 包含 {{ctx.findings_html}} 的 HTML 正文 | HTML。{{ctx.findings_html}} 用于渲染发现项列表。 | | 按发现项逐条发送 | 关闭 | 关闭时,会针对整批内容发送一封电子邮件。 | | 正文中列出的发现项数量 | 25 | {{ctx.findings_html}} 会列出多少条发现项后,再说明还有多少条未列出。 |

调用 Webhook

notify.webhook

向某个 webhook 端点 POST JSON 数据。

设置默认值说明
Webhook 端点一个已配置的通知 webhook。其自定义请求头会随请求一并发送。
URL在未选择端点时显示。指定要 POST 到的地址。
以上两者必须填写其中一个。
签名密钥X-DefectDojo-Signature: sha256=HMAC 的形式对请求体进行签名。
按发现项逐条发送关闭关闭时,会将整批内容放在一个请求中发送。

有两点需要注意。在此处填写的签名密钥会与规则一起存储,因此对于任何敏感信息,最好使用已配置的端点及其自带的请求头。此外,规则调用 webhook 从不会改变该端点自身的健康状态,因此规则本身的失败不会导致你的通知 webhook 被禁用。

手动填写的 URL 会在保存时进行校验。哪些地址会被拒绝、以及如何允许私有地址,参见配置

触发应用内提醒

notify.alert

针对整批内容创建一条应用内提醒。

设置默认值说明
标题Rules Engine 2.0: {{ctx.rule_name}}针对整批内容渲染一次。
描述{{ctx.count}} finding(s) matched the rule {{ctx.rule_name}}.针对整批内容渲染一次。
接收人用户名,用逗号分隔。留空则提醒管理员。

接收人仍然可以通过自己的Rules Engine Match 通知设置来控制这一行为,因此提醒无法绕过用户自己的通知偏好设置。

生成报告

report.generate

根据模板生成一份报告,范围限定为到达此节点的发现项,并可以通知发送该报告的下载链接。

设置默认值说明
报告模板用于生成报告的模板。必填。
格式pdfpdfhtml
包含的发现项batch_findingsbatch_findings 会将报告限定为到达此节点的发现项;template_default 则让模板使用自己的过滤条件。
通知渠道报告生成后,用于发布下载链接的消息连接器。留空则不发送通知。
通知目标在选定连接后显示。指该连接的发送位置:Slack 频道 ID、电子邮件地址等等。
通知内容Report ready: {{ctx.report_url}}在发送通知时显示。{{ctx.report_url}} 即下载链接。

batch_findings 正是规则能做到、而定时报告做不到的事情:精确针对刚刚匹配到的那些发现项生成报告。

该通知会作为一条独立的投递记录单独记录,与报告的生成过程分开,因此你可以分别查看报告生成成功、而通知发送失败这样的情况。