DASTブラウザベースアナライザー
DASTブラウザベースのアナライザは、現代のウェブアプリケーションの脆弱性をスキャンするためにGitLabによって構築されました。スキャンはブラウザ上で実行され、シングルページのアプリケーションなど、JavaScriptに大きく依存するアプリケーションのテストを最適化します。詳しくは、DASTによるアプリケーションのスキャン方法をご覧ください。
アナライザをCI/CDパイプラインに追加するには、始めるを参照してください。
DASTによるアプリケーションのスキャン方法
スキャンは以下のステップを実行します:
- 設定されている場合は、認証します。
- ターゲットアプリケーションをクロールし、リンクをたどる、ボタンをクリックする、フォームに入力するなどのユーザーアクションを実行することで、アプリケーションの表面領域を発見します。
- パッシブスキャンクロール中に発見された HTTP メッセージやページの脆弱性を検索します。
- クロール中に記録されたHTTPリクエストにペイロードを注入して脆弱性を探索するアクティブスキャン。
アプリケーションのクロール
ナビゲーション」とは、ボタンをクリックしたり、アンカーリンクをクリックしたり、メニュー項目を開いたり、フォームに入力したりするような、ユーザーがページ上で取る可能性のあるアクションのことです。ナビゲーションパス」とは、ユーザーがどのようにアプリケーションを横断するかを表す、一連のナビゲーションアクションのことです。DAST は、ページやコンテンツをクロールし、ナビゲーションパスを特定することで、アプリケーションの表面領域を発見します。
クロールは、特別に計測された Chromium ブラウザでターゲットアプリケーションの URL をロードする 1 つのナビゲーションを含むナビゲーションパスで初期化されます。その後、DASTはナビゲーションパスをすべてクロールするまでクロールします。
ナビゲーションパスをクロールするには、DASTはブラウザウィンドウを開き、ナビゲーションパス内のすべてのナビゲーションアクションを実行するように指示します。ブラウザが最後のアクションの結果をロードし終わると、DASTはユーザーが取る可能性のあるアクションについてページを検査し、見つかったそれぞれについて新しいナビゲーションを作成し、それらをナビゲーションパスに追加して新しいナビゲーションパスを形成します。例えば
- DASTはナビゲーションパスLoadURL[https://example.com]を処理します。
- DASTは2つのユーザーアクション、LeftClick[class=menu]とLeftClick[id=users]を見つけます。
- DAST は 2 つの新しいナビゲーションパス、LoadURL[https://example.com] -> LeftClick[class=menu]とLoadURL[https://example.com] -> LeftClick[id=users]を作成します。
- クロールは2つの新しいナビゲーションパス上で開始されます。
全てのページに表示されるメニューのように、HTML 要素がアプリケーションの複数の場所に存在することはよくあることです。要素が重複していると、クローラが同じページを再度クロールしたり、ループにはまり込んだりする可能性があります。DASTは、HTML属性に基づく要素の一意性計算を使って、以前にクロールした新しいナビゲーションアクションを破棄します。
パッシブスキャン
パッシブスキャンは、スキャンのクロールフェーズで発見されたページの脆弱性をチェックします。パッシブスキャンはデフォルトで有効になっています。
この検査では、HTTP メッセージ、Cookie、ストレージイベント、コンソールイベント、および DOM を検索して脆弱性を探します。パッシブ・チェックの例としては、公開されたクレジットカード、公開された秘密トークン、コンテンツ・セキュリティ・ポリシーの欠落、信頼できない場所へのリダイレクトの検索などがあります。
個々のチェックの詳細については、チェックを参照してください。
アクティブスキャン
アクティブスキャンは、スキャンのクロールフェーズで記録されたHTTPリクエストに攻撃ペイロードを注入して脆弱性をチェックします。アクティブ スキャンは、プロービング攻撃の性質上、デフォルトでは無効になっています。
DASTは、クエリ値、ヘッダ値、Cookie値、フォーム投稿、JSON文字列値などの注入場所を記録されたHTTPリクエストごとに分析します。攻撃ペイロードはインジェクション位置に注入され、新しいリクエストを形成します。DASTはリクエストをターゲットアプリケーションに送信し、HTTPレスポンスを使用して攻撃の成功を判断します。
アクティブスキャンは2種類のアクティブチェックを実行します:
- レスポンスの一致攻撃は、レスポンスの内容を分析して攻撃の成功を判断します。たとえば、攻撃がシステム パスワード ファイルの読み取りを試みる場合、レスポンス本文にパスワード ファイルの証拠が含まれていると、検出結果が作成されます。
- タイミング攻撃は、攻撃の成功を決定するために応答時間を使用します。例えば、ある攻撃がターゲットアプリケーションを強制的にスリープさせようとする場合、アプリケーションがスリープ時間より長く応答すると、ファインディングが作成されます。タイミング攻撃は、誤検出を最小限にするために、異なる攻撃ペイロードで複数回繰り返されます。
単純化したタイミング攻撃は以下のように動作します:
- クロールフェーズは HTTP リクエストhttps://example.com?search=peopleを記録します。
- DASTはURLを分析し、URLパラメータ注入場所を見つけますhttps://example.com?search=[INJECT]。
- アクティブチェックは、Linuxホストをスリープさせようとするペイロード(sleep 10)を定義します。
- DAST は、注入されたペイロードhttps://example.com?search=sleep%2010を持つ新しい HTTP リクエストをターゲットアプリケーションに送信します。
- ターゲット・アプリケーションは、例えばクエリ・パラメータの値を検証せずにシステム・コマンドとして実行すると脆弱性 になります、system(params[:search])
- 例えば、DAST は応答時間が 10 秒以上かかると発見します。
利用を開始
DASTスキャンを実行するには
DAST CI/CDジョブの作成
アプリケーションにDASTスキャンを追加するには、GitLab DAST CI/CDテンプレートファイルで定義されたDASTジョブを使用してください。テンプレートのアップデートはGitLabのアップグレードとともに提供され、改善や追加の恩恵を受けることができます。
CI/CDジョブを作成するには:
- 
適切な CI/CD テンプレートをインクルードしてください: - 
DAST.gitlab-ci.yml:DAST CI/CDテンプレートの安定版。
- 
DAST.latest.gitlab-ci.yml:DASTテンプレートの最新バージョン。(GitLab 13.8で導入)。
 テンプレートの最新バージョンは変更を含んでいる可能性があります。最新のテンプレートにしかない機能が必要でない限り、安定版テンプレートを使ってください。テンプレートのバージョン管理について詳しくは、CI/CDのドキュメントを参照してください。 
- 
- 
GitLabのCI/CDステージ設定に dastステージを追加します。
- 
以下のいずれかの方法で、DASTがスキャンするURLを定義します: - 
DAST_WEBSITECI/CD 変数を設定します。設定されている場合、この値が優先されます。
- 
environment_url.txtプロジェクトのルートにあるファイルにenvironment_url.txtURL を追加すると、environment_url.txt動的環境でのテストに最適environment_url.txtです。environment_url.txtGitLab CI/CDパイプライン中に動的に作成されたアプリケーションに対してDASTを実行するには、アプリケーションのURLをファイルに記述environment_url.txtします。DASTは自動的にURLを読み込んでスキャンターゲットを見つけます。この例はAuto DevOps CI YAMLで見ることができます。 
 
- 
- 
CI/CD 変数 DAST_BROWSER_SCANを"true"に設定してください。
使用例:
stages:
  - build
  - test
  - deploy
  - dast
include:
  - template: DAST.gitlab-ci.yml
dast:
  variables:
    DAST_WEBSITE: "https://example.com"
    DAST_BROWSER_SCAN: "true"
認証
ブラウザベースのアナライザでは、スキャン前にユーザーを認証できます。設定方法については、「認証」を参照してください。
利用可能な CI/CD 変数
これらのCI/CD変数は、ブラウザベースのDASTアナライザに特有のものです。これらの変数を使用して、DASTの動作を要件に合わせてカスタマイズすることができます。認証CI/CD変数については、認証を参照してください。
| CI/CD 変数 | 種類 | 物件例 | 説明 | 
|---|---|---|---|
| DAST_ADVERTISE_SCAN | boolean | true | trueに設定すると、GitLab DASTスキャンの一部として送信されたリクエストであることを示すViaヘッダを送信されたリクエストに追加します。GitLab 14.1で導入されました。 | 
| DAST_BROWSER_ACTION_STABILITY_TIMEOUT | 期間文字列 | 800ms | アクションを完了した後、ブラウザがページをロードして分析準備ができたとみなすまでの最大待機時間。 | 
| DAST_BROWSER_ACTION_TIMEOUT | 期間文字列 | 7s | ブラウザがアクションを完了するまでの最大待機時間。 | 
| DAST_BROWSER_ALLOWED_HOSTS | 文字列のリスト | site.com,another.com | この変数に含まれるホスト名は、クロールされたときにスコープ内にあるとみなされます。デフォルトでは DAST_WEBSITEのホスト名が許可されるホストリストに含まれます。DAST_REQUEST_HEADERSを使って設定されたヘッダはこれらのホスト名への すべてのリクエストに追加されます。 | 
| DAST_BROWSER_COOKIES | 辞書 | abtesting_group:3,region:locked | すべてのリクエストに追加されるクッキーの名前と値。 | 
| DAST_BROWSER_CRAWL_GRAPH | boolean | true | trueに設定すると、スキャンのクロールフェーズで訪問したナビゲーションパスの SVG グラフが生成されます。また、生成されたグラフにアクセスできるようにするには、CIジョブのアーティファクトとしてgl-dast-crawl-graph.svgを定義する必要があります。 | 
| DAST_BROWSER_CRAWL_TIMEOUT | 期間文字列 | 5m | スキャンのクロールフェーズが完了するまでの最大待機時間。デフォルトは 24hです。 | 
| DAST_BROWSER_DEVTOOLS_LOG | 文字列です。 | Default:messageAndBody,truncate:2000 | DAST と Chromium ブラウザ間のプロトコルメッセージを記録するために設定します。 | 
| DAST_BROWSER_DOM_READY_AFTER_TIMEOUT | 期間文字列 | 200ms | ページが安定しているかどうかをチェックする前に、 DOM の更新を待つ時間を定義します。デフォルトは 500ms。 | 
| DAST_BROWSER_ELEMENT_TIMEOUT | 期間文字列 | 600ms | 要素が解析可能であると判断するまでの最大待機時間。 | 
| DAST_BROWSER_EXCLUDED_ELEMENTS | セレクタ | a[href='2.html'],css:.no-follow | スキャン時に無視されるセレクタのカンマ区切りリスト。 | 
| DAST_BROWSER_EXCLUDED_HOSTS | 文字列のリスト | site.com,another.com | この変数に含まれるホスト名は除外されたとみなされ、接続は強制的に切断されます。 | 
| DAST_BROWSER_EXTRACT_ELEMENT_TIMEOUT | 期間文字列 | 5s | ブラウザが新しく見つけた要素やナビゲーションを抽出するまでの最大時間。 | 
| DAST_BROWSER_FILE_LOG | 文字列のリスト | brows:debug,auth:debug | ファイルログで使われるモジュールとそのロギングレベルのリスト。 | 
| DAST_BROWSER_FILE_LOG_PATH | 文字列です。 | /output/browserker.log | ログファイルのパスを設定します。 | 
| DAST_BROWSER_IGNORED_HOSTS | 文字列のリスト | site.com,another.com | この変数に含まれるホスト名は、アクセスされたものであり、攻撃されたものではなく、それに対してレポーターされたものでもありません。 | 
| DAST_BROWSER_INCLUDE_ONLY_RULES | 文字列のリスト | 16.1,16.2,16.3 | スキャンに使用するチェック識別子のカンマ区切りリスト。 | 
| DAST_BROWSER_LOG | 文字列のリスト | brows:debug,auth:debug | コンソールログで使われるモジュールとそのロギングレベルのリスト。 | 
| DAST_BROWSER_LOG_CHROMIUM_OUTPUT | boolean | true | Chromium STDOUTおよびSTDERRのログを記録する場合はtrueに設定します。 | 
| DAST_BROWSER_MAX_ACTIONS | 数 | 10000 | クローラーが実行するアクションの最大数。例えば、リンクの選択やフォームへの入力など。 | 
| DAST_BROWSER_MAX_DEPTH | 数 | 10 | クローラーが取るアクションの最大連鎖数。例えば、 Click -> Form Fill -> Clickは 3 の深さです。 | 
| DAST_BROWSER_MAX_RESPONSE_SIZE_MB | 数 | 15 | HTTPレスポンスボディの最大サイズ。これより大きなボディを持つレスポンスはブラウザによってブロックされます。デフォルトは 10 MB です。 | 
| DAST_BROWSER_NAVIGATION_STABILITY_TIMEOUT | 期間文字列 | 7s | ナビゲーションが完了した後、ブラウザがページを読み込んで解析準備ができたとみなすまでの最大待機時間。デフォルトは 800ms。 | 
| DAST_BROWSER_NAVIGATION_TIMEOUT | 期間文字列 | 15s | ブラウザがあるページから別のページに移動するまでの最大待機時間。 | 
| DAST_BROWSER_NUMBER_OF_BROWSERS | 数 | 3 | 同時に使用するブラウザインスタンスの最大数。GitLab.com の共有 Runner では、最大 3 つまでとすることを推奨します。リソースに余裕のある非公開 Runner の場合はもっと多くしてもよいかもしれませんが、5 から 7 インスタンス程度ではほとんど意味がないでしょう。 | 
| DAST_BROWSER_PAGE_LOADING_SELECTOR | セレクタ | css:#page-is-loading | ページが表示されなくなったときに、アナライザにページの読み込みが終了し、スキャンを続行できることを示すセレクタ。 DAST_BROWSER_PAGE_READY_SELECTORとは併用できません。 | 
| DAST_BROWSER_PAGE_READY_SELECTOR | セレクタ | css:#page-is-ready | ページ上で可視であることが検出されると、アナライザにページの読み込みが終了し、スキャンを続行できることを示すセレクタ。 DAST_BROWSER_PAGE_LOADING_SELECTORとは併用できません。 | 
| DAST_BROWSER_PASSIVE_CHECK_WORKERS | int | 5 | パッシブスキャンを並行して行うワーカーの数。利用可能な CPU の数に設定することを推奨します。 | 
| DAST_BROWSER_SCAN | boolean | true | ブラウザベースのスキャンを実行するには trueが必要です。 | 
| DAST_BROWSER_SEARCH_ELEMENT_TIMEOUT | 期間文字列 | 3s | ブラウザが新しい要素やユーザーアクションを検索する最大時間。 | 
| DAST_BROWSER_STABILITY_TIMEOUT | 期間文字列 | 7s | ブラウザがページを読み込んで解析準備ができたとみなすまでの最大待機時間。 | 
| DAST_EXCLUDE_RULES | 文字列です。 | 10020,10026 | ZAP 脆弱性ルール ID のカンマ区切りリストを設定し、スキャン中に実行されないようにします。ルール ID は番号で、DAST ログまたはZAP プロジェクトで確認できます。 | 
| DAST_EXCLUDE_URLS | URL | https://example.com/.*/sign-out | 認証スキャン中にスキップするURL。カンマ区切り。正規表現構文を使用して、複数の URL に一致させることができます。例えば、 .*は任意の文字列にマッチします。 | 
| DAST_FF_ENABLE_BAS | boolean | true | trueに設定すると、この DAST スキャン中に侵害と攻撃のシミュレーションが有効になります。 | 
| DAST_FULL_SCAN_ENABLED | boolean | true | trueに設定すると、パッシブチェックとアクティブチェックの両方を実行します。デフォルトfalse | 
| DAST_PATHS | 文字列です。 | /page1.html,/category1/page3.html | DAST がスキャンする DAST_WEBSITEからの相対 URL パスのカンマ区切りリストを設定します。 | 
| DAST_PATHS_FILE | 文字列です。 | /builds/project/urls.txt | DAST がスキャンする DAST_WEBSITEからの相対 URL パスのリストを含むファイルパスに設定します。ファイルはプレーンテキストで、1行に1つのパスでなければなりません。 | 
| DAST_PKCS12_CERTIFICATE_BASE64 | 文字列です。 | ZGZkZ2p5NGd... | 相互TLSを必要とするサイトで使用されるPKCS12証明書。base64テキストでエンコードされている必要があります。 | 
| DAST_PKCS12_PASSWORD | 文字列です。 | password | DAST_PKCS12_CERTIFICATE_BASE64で使用する証明書のパスワード。GitLab UI を使って、機密性の高いカスタム CI/CI 変数を作成します。 | 
| DAST_REQUEST_HEADERS | 文字列です。 | Cache-control:no-cache | リクエストヘッダの名前と値をコンマで区切ったリストに設定します。 | 
| DAST_SKIP_TARGET_CHECK | boolean | true | trueに設定すると、スキャン前にターゲットが利用可能かどうかを DAST がチェックしないようにします。デフォルト:false。 | 
| DAST_TARGET_AVAILABILITY_TIMEOUT | 数 | 60 | ターゲットが利用可能になるまでの待ち時間を秒単位で指定します。 | 
| DAST_WEBSITE | URL | https://example.com | スキャンするウェブサイトのURL。 | 
| SECURE_ANALYZERS_PREFIX | URL | registry.organization.com | アナライザーをダウンロードするDockerレジストリのベースアドレスを設定します。 | 
スコープの管理
スコープは、DAST がターゲットアプリケーションをクロールする際にどの URL をたどるかを制御します。スコープを適切に管理することで、スキャンの実行時間を最短にすると同時に、ターゲットアプリケーションの脆弱性のみを確実にチェックします。
スコープの種類
スコープには3種類あります:
- スコープ内
- 範囲外
- 対象外
範囲内
DASTはスコープ内のURLを追跡し、DOMを検索してクロールを継続するための後続アクションを探します。記録されたスコープ内のHTTPメッセージは、受動的に脆弱性をチェックし、フルスキャンを実行する際に攻撃を構築するために使用されます。
スコープ外
DASTは、画像、スタイルシート、フォント、スクリプト、AJAXリクエストなど、ドキュメント以外のコンテンツタイプについては、スコープ外のURLに従います。認証は別として、DASTは外部ウェブサイトへのリンクをクリックした場合など、全ページを読み込んだ場合にはスコープ外URLを追跡しません。情報漏えいを検索する受動的なチェックを除き、スコープ外URLの記録されたHTTPメッセージは脆弱性をチェックしません。
スコープから除外
DASTはスコープから除外されたURLを追跡しません。情報漏えいを検索する受動的なチェックを除き、スコープから除外されたURLの記録されたHTTPメッセージは脆弱性をチェックしません。
認証時のスコープの動作は異なります
多くのターゲットアプリケーションでは、シングルサインオン((SSO) )のために ID アクセス管理プロバイダを使用する場合など、認証プロセスが外部のウェブサイトに依存しています。DASTがこれらのプロバイダで確実に認証できるようにするため、DASTは認証時にフルページロードのスコープ外URLをたどります。DASTはスコープから除外されたURLには従いません。
DASTがHTTPリクエストをブロックする方法
DASTはスコープルールによってリクエストをブロックする場合、通常通りHTTP リクエストを行うようブラウザに指示します。リクエストはその後インターセプトされ、BlockedByClient という理由で拒否されます。この方法によって、DASTはHTTPリクエストを記録しながら、ターゲットサーバーに到達しないようにすることができます。200.1などのパッシブチェックでは、外部ホストに送信された情報を検証するために、記録された リクエストを使用します。
スコープの設定方法
デフォルトでは、ターゲットアプリケーションのホストに一致するURLはスコープ内とみなされます。それ以外のホストはスコープ外とみなされます。
スコープは以下の変数を使って設定します:
- 
DAST_BROWSER_ALLOWED_HOSTSを使ってスコープ内ホストを追加します。
- 対象外のホストに追加するにはDAST_BROWSER_IGNORED_HOSTSを使ってください。
- 対象外ホストに追加するにはDAST_BROWSER_EXCLUDED_HOSTSを使ってください。
- 
DAST_EXCLUDE_URLSを使用して、特定の URL を除外対象として設定します。
ルール
- ホストを除外することは、ホストを無視することよりも優先され、ホストを許可することよりも優先されます。
- ホストのスコープを設定しても、そのホストのサブドメインのスコープは設定されません。
- ホストにスコープを設定しても、そのホストのすべてのポートにスコープを設定することはできません。
典型的な設定は次のようなものです:
include:
  - template: DAST.gitlab-ci.yml
dast:
  variables:
    DAST_WEBSITE: "https://my.site.com"                   # my.site.com URLs are considered in-scope by default
    DAST_BROWSER_ALLOWED_HOSTS: "api.site.com:8443"       # include the API as part of the scan
    DAST_BROWSER_IGNORED_HOSTS: "analytics.site.com"      # explicitly disregard analytics from the scan
    DAST_BROWSER_EXCLUDED_HOSTS: "ads.site.com"           # don't visit any URLs on the ads subdomain
    DAST_EXCLUDE_URLS: "https://my.site.com/user/logout"  # don't visit this URL
脆弱性の検出
脆弱性検知は、デフォルトのZed Attack Proxy(ZAP) ソリューションからブラウザベースのアナライザに徐々にマイグレーションされています。すでにマイグレーションされた脆弱性検出の詳細については、ブラウザベースの脆弱性チェックを参照してください。
クローラーはDAST/ZAPをプロキシサーバーとして設定したブラウザでターゲットウェブサイトを実行します。これにより、ブラウザによるすべてのリクエストとレスポンスが DAST/ZAP によって受動的にスキャンされます。フルスキャンを実行する場合、DAST/ZAPが実行するアクティブ脆弱性チェックはブラウザを使用しません。この脆弱性のチェック方法の違いにより、スキャンが意図したとおりに動作するように、ターゲットウェブサイトの特定の機能を無効にする必要があるというイシューが発生する可能性があります。
例えば、Anti-CSRF トークンを使用したフォームを含むターゲット Web サイトの場合、ブラウザはページやフォームをユーザーがページを見ているかのように表示するため、パッシブスキャンは意図したとおりに動作します。しかし、フルスキャンで実行されるアクティブ脆弱性チェックでは、Anti-CSRF トークンを含むフォームを送信できません。このような場合は、フルスキャンを実行する際にAnti-CSRFトークンを無効にすることをお勧めします。
スキャン時間の管理
ブラウザベースのクローラーを実行することで、標準的なGitLab DASTソリューションと比較して、多くのウェブアプリケーションのカバレッジが向上することが期待されます。これはスキャン時間の増加という代償を払うことになります。
カバレッジとスキャン時間のトレードオフは、以下の方法で管理することができます:
- ランナーを垂直方向に拡大縮小し、変数 DAST_BROWSER_NUMBER_OF_BROWSERSでより多くのブラウ ザーを使用します。デフォルトは3。
- ブラウザが実行するアクションの数を変数 DAST_BROWSER_MAX_ACTIONSで制限します。デフォルトは10,000です。
- ブラウザベースのクローラーがカバレッジをチェックするページの深さを変数 DAST_BROWSER_MAX_DEPTHで制限します。クローラーは幅優先の検索戦略を使うので、深さの浅いページが最初にクロールされます。デフォルトは10です。
- 
変数 DAST_BROWSER_CRAWL_TIMEOUTでターゲットアプリケーションのクロールにかかる時間を制限します。デフォルトは24hです。クローラーがタイムアウトしても、スキャンはパッシブチェックとアクティブチェックで継続されます。
- 
DAST_BROWSER_CRAWL_GRAPHという変数でクロールグラフを作成し、どのページがクロールされているかを確認します。
- ページがクロールされないようにするには、変数 DAST_EXCLUDE_URLSを使います。
- 
変数 DAST_BROWSER_EXCLUDED_ELEMENTSを使って、要素が選択されないようにします。この変数を定義すると、クロールされる各ページに余分なルックアップが発生するので、注意して使用してください。
- ターゲット・アプリケーションのレンダリングが最小限か高速の場合、変数 DAST_BROWSER_DOM_READY_AFTER_TIMEOUTをより小さな値にすることを検討してください。デフォルトは500msです。
タイムアウト
ネットワークの状態が悪かったり、アプリケーションの負荷が高かったりすると、デフォルトのタイムアウトが適用されない場合があります。
ブラウザベースのスキャンは、1つのページから次のページへの遷移をスムーズに継続するために、様々なタイムアウトを調整する機能を提供します。これらの値はDuration文字列を使用して設定されます。Duration文字列は接頭辞で設定することができます: 分はm 、秒はs 、ミリ秒はms 。
Navigations、もしくは新しいページをロードする行為は、JavaScriptやCSSファイルのような複数の新しいリソースをロードするので、通常もっとも多くの時間を必要とします。これらのリソースのサイズや返される速度によっては、デフォルトのDAST_BROWSER_NAVIGATION_TIMEOUT では不十分な場合があります。
DAST_BROWSER_NAVIGATION_STABILITY_TIMEOUT,DAST_BROWSER_STABILITY_TIMEOUT,DAST_BROWSER_ACTION_STABILITY_TIMEOUT で設定可能なような安定タイムアウトも設定可能です。安定性タイムアウトは、ブラウザベースのスキャンがページを完全に読み込んだとみなすタイミングを決定します。ブラウザベースのスキャンは以下の場合にページがロードされたとみなします:
- DOMContentLoadedイベントが発生したとき。
- JavaScriptやCSSのような重要なリクエストはありません。メディアファイルは通常、重要ではないと判断されます。
- 
ブラウザがナビゲーションを実行したか、強制的に遷移させられたか、アクションを実行したかによって異なります: - 
DAST_BROWSER_NAVIGATION_STABILITY_TIMEOUT、DAST_BROWSER_STABILITY_TIMEOUT、DAST_BROWSER_ACTION_STABILITY_TIMEOUTの期間の後には、新しい Document Object Model(DOM) の変更イベントはありません。
 
- 
これらのイベントが発生した後、ブラウザベースのスキャンはページがロードされ準備ができたとみなし、次のアクションを試みます。
アプリケーションが遅延を経験したり、多くのナビゲーション失敗を返す場合、この例のようにタイムアウト値を調整することを検討してください:
include:
  - template: DAST.gitlab-ci.yml
dast:
  variables:
    DAST_WEBSITE: "https://my.site.com"
    DAST_BROWSER_NAVIGATION_TIMEOUT: "25s"
    DAST_BROWSER_ACTION_TIMEOUT: "10s"
    DAST_BROWSER_STABILITY_TIMEOUT: "15s"
    DAST_BROWSER_NAVIGATION_STABILITY_TIMEOUT: "15s"
    DAST_BROWSER_ACTION_STABILITY_TIMEOUT: "3s"
トラブルシューティング
詳しくはトラブルシューティングをご覧ください。
