使用 URL (Pro)
URL 位置在功能上取代了旧版的端点模型。它们存储着您熟悉的相同 URL 结构字段——protocol、host、port、path、query、fragment——并发挥着相同的作用:标识某个 Web 应用发现项位于何处。
本页介绍在日常使用 URL 位置时会发生哪些变化、新增的界面入口,以及应使用哪些 API 端点来代替旧版端点 API。
URL 子类型
每个 URL 都是一个位置。这意味着 URL 同时具备:
- 结构化的 URL 字段(
protocol、user_info、host、port、path、query、fragment,以及用于去重的hash)。 - 共享的位置字段(
location_type="url"、用于显示和搜索的规范location_value字符串、标签、继承标签、元数据,以及指向资产和发现项的引用链接)。
当您创建或上传一个 URL 时,DefectDojo 会将其解析为结构化字段,并在一次事务中同时写入 URL 记录及其父级位置记录。URL 去重采用结构化字段的精确匹配——只有当所有组成部分都匹配时,两个 URL 才会被视为相同,同时会应用标准的默认端口归并规则(http://example.com:80/ 和 http://example.com/ 会解析为同一个 URL)。
在 Pro 版界面中
启用位置功能后,导航栏会提供以下选项:
- 位置 / 全部 —— 列出 URL 和依赖项两种子类型下的所有位置,可按类型、状态、资产、发现项或标签进行筛选。
- 位置 / URL —— 仅显示 URL 位置的限定列表,是与旧版端点页面最为接近的对应功能。
- 新建 URL —— 用于创建单个 URL 的表单,包含结构化字段、标签以及可选的资产/发现项关联。
- 资产上的位置 —— 在任意资产中,位置标签页会显示附加在该资产上的 URL 和依赖项,并提供状态统计和快捷操作。
旧版端点界面中的常见工作流程得以保留:
- 批量状态更新。 选择多个 URL 位置,一次性为其发现项引用应用某个状态(活动、已缓解、误报、风险已接受、超出范围)。
- 将现有 URL 添加到资产。 在资产的位置标签页中使用添加现有项,即可关联系统中已存在的 URL,而不必创建重复项。
- 标签。 应用于某个 URL 位置的标签,会作为继承标签传播到引用它的发现项上,与此前端点标签的行为方式相同。
状态模型
URL 位置使用与所有其他位置相同的单一状态标签:
| 状态 | 含义 |
|---|---|
| 活动 | 该 URL 上的发现项处于开放状态。 |
| 已缓解 | 该 URL 上的发现项已完成修复。 |
| 误报 | 该发现项在此 URL 上并非真实漏洞。 |
| 风险已接受 | 该发现项在此 URL 上已被确认但接受其风险。 |
| 超出范围 | 该 URL 已被排除在测试活动范围之外。 |
请注意,旧版的端点状态模型允许多个标志同时生效(例如 mitigated=True 和 false_positive=True)。位置在同一时刻只强制保留一个状态。如果您是从端点迁移而来,系统会保留最具体的标志(参见从端点迁移中的映射表)。
资产引用使用更简单的状态:仅有活动或已缓解,因为资产级别的状态不需要那么详细的审计信息。
REST API
请使用以下端点来代替旧版端点 API:
| 任务 | 端点 |
|---|---|
| 列出 URL | GET /api/v2/urls/ |
| 创建 URL | POST /api/v2/urls/ |
| 更新 URL 的标签或元数据 | PATCH /api/v2/urls/{id}/ |
| 列出所有位置(URL + 依赖项) | GET /api/v2/location/?location_type=url |
| 将 URL 关联到发现项 | POST /api/v2/location_findings/ |
| 将 URL 关联到资产 | POST /api/v2/location_Assets/ |
| 更新发现项关联的状态 | PATCH /api/v2/location_findings/{id}/ |
| 移除发现项关联 | DELETE /api/v2/location_findings/{id}/ |
/api/v2/urls/ 上的筛选条件包括结构化 URL 字段,以及 tag(s)、has_tags、Asset,并支持按 host、Asset 或活动发现项数量排序。
旧版的 /api/v2/endpoints/ 端点仍通过兼容层提供读取流量的服务——关于保留了哪些内容以及该兼容层与原始行为的差异,请参见从端点迁移。对旧版端点的写入操作会返回 403,必须迁移到上述端点。
从扫描导入 URL
扫描器导入会自动创建 URL 位置。当解析器为某个发现项输出一个 URL 时(与此前输出端点的方式相同),导入器会:
- 查找结构化字段匹配的现有 URL,若不存在则创建一个。
- 创建一个发现项引用,将该发现项与该 URL 关联,状态为活动。
- 创建(或复用)一个资产引用,使该 URL 也出现在其所属的父级资产下。
此前会创建端点的 DefectDojo 解析器均已更新,可在 Pro 版中自动创建位置。
行为差异之处
以下几个细微的行为变化值得注意:
- 每个 URL/发现项组合仅有一个状态。 如上所述,多标志的 Endpoint_Status 模型已被归并为单一状态。原先独立切换各个标志的工作流程,现在需要选择一次单一的状态转换。
- 标签位于位置上,而非 URL 上。 URL 子类型本身不携带独立的标签集合;标签属于其父级位置。通过 API 读取 URL 时,
tags字段来自location.tags。 - 去重按规范化 URL 进行,而非按资产进行。 拥有相同 URL 的两个资产会共享同一个底层 URL 位置,并各自对其引用一次(每个资产各有一个资产引用)。这是有意为之的设计,正是它使得跨资产报告成为可能。
- 发现项上的
endpoints字段。 当该功能开启时,发现项 API 上的这个字段仍会返回记录,但这些记录是由 URL 位置映射而成,而非来自端点表。请将其视为只读字段,写入操作应改为通过/api/v2/location_findings/进行。