Help us learn about your current experience with the documentation. Take the survey.

DAST 配置文件

  • 级别:终极
  • 提供:GitLab.com、GitLab 自托管、GitLab 专用

DAST 站点和扫描器配置文件保存与您的应用程序以及用于评估它们的扫描器相关的信息。 一旦定义了配置文件,您就可以将其用于流水线和按需 DAST 作业。

DAST 配置文件、DAST 扫描器配置文件和 DAST 站点配置文件的创建、更新和删除都包含在审计日志中。

站点配置文件

站点配置文件定义了 DAST 要扫描的已部署应用程序、网站或 API 的属性和配置详细信息。

站点配置文件包含:

  • 配置文件名称:为您要扫描的站点分配的名称。当站点配置文件在 .gitlab-ci.yml 或按需扫描中被引用时,不能重命名。

  • 站点类型:要扫描的目标类型,可以是网站扫描或 API 扫描。

  • 目标 URL:DAST 运行时针对的 URL。

  • 排除的 URL:要从扫描中排除的 URL 列表,用逗号分隔。 您可以使用 RE2 样式的正则表达式。正则表达式不能包含问号(?)字符,因为它是有效的 URL 字符。

  • 请求头:HTTP 请求头的逗号分隔列表,包括名称和值。这些头信息会添加到 DAST 发送的每个请求中。

  • 身份验证

    • 已验证 URL:目标网站上包含登录 HTML 表单的页面 URL。用户名和密码通过登录表单提交,以创建已验证的扫描。
    • 用户名:用于登录网站的用户名。
    • 密码:用于登录网站的密码。
    • 用户名字段:登录 HTML 表单中用户名字段的名称。
    • 密码字段:登录 HTML 表单中密码字段的名称。
    • 提交按钮字段:选择后会提交登录 HTML 表单的元素的 idname
  • 扫描方法:执行 API 测试的方法类型。支持的方法包括 OpenAPI、Postman 集合、HTTP 存档(HAR)或 GraphQL。

    • GraphQL 端点路径:GraphQL 端点的路径。该路径与目标 URL 连接,为扫描提供要测试的 URI。GraphQL 端点必须支持内省查询。
    • 文件 URL:OpenAPI、Postman 集合或 HTTP 存档文件的 URL。
  • 额外变量:用于配置特定扫描行为的变量列表。这些变量提供与基于流水线的 DAST 扫描相同的配置选项,例如设置超时、添加身份验证成功 URL 或启用高级扫描功能。

当选择 API 站点类型时,会使用主机覆盖来确保被扫描的 API 与目标在同一主机上。这样做是为了降低对错误的 API 运行主动扫描的风险。

配置后,请求头和密码字段会在存储到数据库之前使用 aes-256-gcm 进行加密。 这些数据只能使用有效的密钥文件读取和解密。

您可以在 .gitlab-ci.yml 和按需扫描中引用站点配置文件。

stages:
  - dast

include:
  - template: DAST.gitlab-ci.yml

dast:
  stage: dast
  dast_configuration:
    site_profile: "<配置文件名称>"

站点配置文件验证

站点配置文件验证降低了针对错误网站运行主动扫描的风险。在针对站点运行主动扫描之前,必须先验证该站点。站点配置文件验证不是安全功能。 如有必要,您可以通过使用流水线扫描来运行主动 DAST 扫描,而无需验证。

每种站点验证方法在功能上是等效的,因此请使用最适合您的方法:

  • 文本文件验证:要求将文本文件上传到目标站点。该文本文件会被分配一个名称和内容,这些内容对项目是唯一的。验证过程会检查文件的内容。
  • 请求头验证:要求将名为 Gitlab-On-Demand-DAST 的请求头添加到目标站点,其值对项目是唯一的。验证过程会检查该请求头是否存在,并检查其值。
  • 元标签验证:要求将名为 gitlab-dast-validation 的元标签添加到目标站点,其值对项目是唯一的。确保将其添加到页面的 <head> 部分。验证过程会检查该元标签是否存在,并检查其值。

创建站点配置文件

要创建站点配置文件:

  1. 在左侧边栏,选择搜索或转到并找到您的项目。
  2. 选择安全 > 安全配置
  3. 动态应用程序安全测试(DAST)部分,选择管理配置文件
  4. 选择新建 > 站点配置文件
  5. 完成字段填写,然后选择保存配置文件

站点配置文件已保存,可用于按需扫描。

编辑站点配置文件

先决条件:

  • 如果 DAST 扫描使用该配置文件,您必须能够推送到与扫描关联的分支。

如果站点配置文件链接到安全策略,您无法从此页面编辑该配置文件。有关更多信息,请参阅扫描执行策略

如果站点配置文件的"目标 URL"或"已验证 URL"被更新,与该配置文件关联的请求头和密码字段将被清除。

当已验证的站点配置文件的文件、请求头或元标签被编辑时,站点的验证状态将被撤销。

要编辑站点配置文件:

  1. 在左侧边栏,选择搜索或转到并找到您的项目。
  2. 选择安全 > 安全配置
  3. 动态应用程序安全测试(DAST)部分,选择管理配置文件
  4. 选择站点配置文件选项卡。
  5. 在配置文件的行中,选择更多操作 ellipsis_v )菜单,然后选择编辑
  6. 编辑字段,然后选择保存配置文件

删除站点配置文件

先决条件:

  • 如果 DAST 扫描使用该配置文件,您必须能够推送到与扫描关联的分支。

如果站点配置文件链接到安全策略,用户无法从此页面删除该配置文件。 有关更多信息,请参阅扫描执行策略

要删除站点配置文件:

  1. 在左侧边栏,选择搜索或转到并找到您的项目。
  2. 选择安全 > 安全配置
  3. 动态应用程序安全测试(DAST)部分,选择管理配置文件
  4. 选择站点配置文件选项卡。
  5. 在配置文件的行中,选择更多操作 ellipsis_v )菜单,然后选择删除
  6. 选择删除以确认删除。

验证站点配置文件

运行主动扫描需要验证站点。

先决条件:

  • 项目中必须可用的 runner 来运行验证作业。

要验证站点配置文件:

  1. 在左侧边栏,选择搜索或转到并找到您的项目。
  2. 选择安全 > 安全配置
  3. 动态应用程序安全测试(DAST)部分,选择管理配置文件
  4. 选择站点配置文件选项卡。
  5. 在配置文件的行中,选择验证
  6. 选择验证方法。
    1. 对于文本文件验证
      1. 下载步骤 2中列出的验证文件。
      2. 将验证文件上传到主机,上传到步骤 3中的位置或您选择的任何位置。
      3. 如有必要,编辑步骤 3中的文件位置。
      4. 选择验证
    2. 对于请求头验证
      1. 选择步骤 2中的剪贴板图标。
      2. 编辑要验证的站点的请求头,并粘贴剪贴板内容。
      3. 选择步骤 3中的输入字段,并输入请求头的位置。
      4. 选择验证
    3. 对于元标签验证
      1. 选择步骤 2中的剪贴板图标。
      2. 编辑要验证的站点的元标签内容,并粘贴剪贴板内容。
      3. 选择步骤 3中的输入字段,并输入元标签的位置。
      4. 选择验证

站点已验证,可以对其运行主动扫描。站点配置文件的验证状态仅在手动撤销或其文件、请求头或元标签被编辑时才会被撤销。

重试失败的验证

失败的站点验证尝试列在管理配置文件页面的站点配置文件选项卡上。

要重试站点配置文件的失败验证:

  1. 在左侧边栏,选择搜索或转到并找到您的项目。
  2. 选择安全 > 安全配置
  3. 动态应用程序安全测试(DAST)部分,选择管理配置文件
  4. 选择站点配置文件选项卡。
  5. 在配置文件的行中,选择重试验证

撤销站点配置文件的验证状态

当站点配置文件的验证状态被撤销时,所有共享相同 URL 的站点配置文件的验证状态也会被撤销。

要撤销站点配置文件的验证状态:

  1. 在左侧边栏,选择搜索或转到并找到您的项目。
  2. 选择安全 > 安全配置
  3. 动态应用程序安全测试(DAST)部分,选择管理配置文件
  4. 在已验证的配置文件旁边,选择撤销验证

站点配置文件的验证状态被撤销。

已验证的站点配置文件请求头

以下是如何在您的应用程序中提供所需站点配置文件请求头的代码示例。

按需扫描的 Ruby on Rails 示例

以下是如何在 Ruby on Rails 应用程序中添加自定义请求头:

class DastWebsiteTargetController < ActionController::Base
  def dast_website_target
    response.headers['Gitlab-On-Demand-DAST'] = '0dd79c9a-7b29-4e26-a815-eaaf53fcab1c'
    head :ok
  end
end

按需扫描的 Django 示例

以下是如何在Django 中添加自定义请求头

class DastWebsiteTargetView(View):
    def head(self, *args, **kwargs):
      response = HttpResponse()
      response['Gitlab-On-Demand-DAST'] = '0dd79c9a-7b29-4e26-a815-eaaf53fcab1c'

      return response

按需扫描的 Node(使用 Express)示例

以下是如何在Node(使用 Express)中添加自定义请求头

app.get('/dast-website-target', function(req, res) {
  res.append('Gitlab-On-Demand-DAST', '0dd79c9a-7b29-4e26-a815-eaaf53fcab1c')
  res.send('Respond to DAST ping')
})

扫描器配置文件

扫描器配置文件定义了安全扫描器的配置详细信息。

扫描器配置文件包含:

  • 配置文件名称:您为扫描器配置文件分配的名称。例如,“Spider_15”。当扫描器配置文件在 .gitlab-ci.yml 或按需扫描中被引用时,不能重命名。
  • 扫描模式:被动扫描会监控发送到目标的所有 HTTP 消息(请求和响应)。主动扫描会攻击目标以查找潜在漏洞。
  • 爬取超时:爬虫遍历网站允许的最大分钟数。
  • 目标超时:DAST 在开始扫描之前等待站点可用的最大秒数。
  • 调试消息:在 DAST 控制台输出中包含调试消息。

您可以在 .gitlab-ci.yml 和按需扫描中引用扫描器配置文件。

stages:
  - dast

include:
  - template: DAST.gitlab-ci.yml

dast:
  stage: dast
  dast_configuration:
    scanner_profile: "<配置文件名称>"

创建扫描器配置文件

要创建扫描器配置文件:

  1. 在左侧边栏,选择搜索或转到并找到您的项目。
  2. 选择安全 > 安全配置
  3. 动态应用程序安全测试(DAST)部分,选择管理配置文件
  4. 选择新建 > 扫描器配置文件
  5. 完成表单。有关每个字段的详细信息,请参阅扫描器配置文件
  6. 选择保存配置文件

编辑扫描器配置文件

先决条件:

  • 如果 DAST 扫描使用该配置文件,您必须能够推送到与扫描关联的分支。

如果扫描器配置文件链接到安全策略,您无法从此页面编辑该配置文件。 有关更多信息,请参阅扫描执行策略

要编辑扫描器配置文件:

  1. 在左侧边栏,选择搜索或转到并找到您的项目。
  2. 选择安全 > 安全配置
  3. 动态应用程序安全测试(DAST)部分,选择管理配置文件
  4. 选择扫描器配置文件选项卡。
  5. 在扫描器的行中,选择更多操作 ellipsis_v )菜单,然后选择编辑
  6. 编辑表单。
  7. 选择保存配置文件

删除扫描器配置文件

先决条件:

  • 如果 DAST 扫描使用该配置文件,您必须能够推送到与扫描关联的分支。

如果扫描器配置文件链接到安全策略,用户无法从此页面删除该配置文件。 有关更多信息,请参阅扫描执行策略

要删除扫描器配置文件:

  1. 在左侧边栏,选择搜索或转到并找到您的项目。
  2. 选择安全 > 安全配置
  3. 动态应用程序安全测试(DAST)部分,选择管理配置文件
  4. 选择扫描器配置文件选项卡。
  5. 在扫描器的行中,选择更多操作 ellipsis_v )菜单,然后选择删除
  6. 选择删除