メインコンテンツまでスキップ

MPA 用: 自動巡回

info

本チュートリアルで扱う機能は、Web アプリケーション診断機能をご契約いただいた組織でのみご利用いただけます。

Shisho Cloud では診断対象アプリケーションのエンドポイントを洗い出すために、自動巡回機能を提供しています。アプリケーションのトップページを入力すると、Shisho Cloud はページ中のリンクやフォームを辿ってアプリケーションを自動で巡回し、エンドポイントを洗い出します。

巡回

「巡回ジョブ」タブ (https://cloud.shisho.dev/[orgid]/applications/[appid]/jobs/find) に移動し、「巡回ジョブを実行」ボタンをクリックします。

「巡回ジョブ」タブ

巡回ジョブの「エントリーポイント」欄には、巡回の起点となる URL を指定します。ログインが不要なアプリケーションではトップページを、ログインが必要なアプリケーションではログイン後のトップページを指定すると良いでしょう。エントリーポイントを入力したら、「予約」ボタンをクリックします。

巡回ジョブを予約してからしばらく待つと、Shisho Cloud は指定した URL を起点にページ内のリンクやフォーム等を自動で探索して辿り、エンドポイントやシナリオを登録していきます。

巡回ジョブ詳細画面

巡回結果の修正

Shisho Cloud は巡回中にフォームを検出した際に、入力欄を自動で記入して送信します。しかし場合によっては、自動で入力されたパラメータが適当でなく、フォームの正常送信後の画面に遷移できないことがあります。そのような場合には、入力すべきパラメータを手動で指定し、フォームの正常送信後の画面から巡回を再開させることができます。

「エンドポイント」タブを開き、パラメータを修正したいエンドポイントを選択します。

エンドポイントタブ

エンドポイントの更新画面では、YAML 入力欄にエンドポイントのパラメータが記載されています。例えば以下のエンドポイントには、name というパラメータに対し、shisho という値が自動で入力されています。

エンドポイント更新画面

name パラメータの値として shisho ではなく例えば テスト という値を指定したい場合には、value の箇所を テスト に書き換えます。

エンドポイント更新画面

パラメータを修正したら、右上の「保存」ドロップダウンをクリックし、「保存して巡回を再開」をクリックしてください。すると、この修正したパラメータを用いてリクエストが送信され、そこから巡回が再開されます。

シナリオの修正

エンドポイントの機能によっては、そのエンドポイントにリクエストを送信する前に、別のリクエストを送信しておく必要があることがあります。例えば削除系のエンドポイントでは、削除のリクエストを送信する前に、削除対象のリソースを作成しておく必要があるでしょう。このようなケースでは、「作成リクエストを送信した後に削除リクエストを送信する」というシナリオを設定することにより、削除系のエンドポイントを効果的に診断できます。

シナリオを編集するには、「シナリオ」タブを開き、編集したいシナリオを選択します。

シナリオタブ

「更新」タブを選択すると、シナリオを編集できます。

シナリオ更新画面

このチュートリアルでは、削除リクエストの前に作成リクエストを送信しておくようなシナリオの設定方法を説明します。シナリオの定義に関する網羅的な説明については、リファレンスを参照してください。

シナリオ更新画面 (編集後)

まず、Step 1. の上にある「Add step」ボタンをクリックして、削除リクエストの前にステップを追加します。

追加した Step のエンドポイント欄の「Select」ボタンをクリックし、作成リクエストを送信するエンドポイントを選択します。エンドポイントが多い場合には、検索欄にパスを入力して絞り込むと探しやすいでしょう。

エンドポイントを絞り込む

エンドポイントを選択したら、「Select」ボタンをクリックして選択を確定します。

次に、作成リクエストのレスポンスからリソースの ID を抽出し、削除リクエストに注入するための設定を入力します。ここでは作成時のレスポンスにおけるリソース ID が、ヘッダーに Location: /mypage/items?id=XXXX という形で記載されていると仮定します。このような場合では、Step 1. の YAML 入力欄に以下のような設定を入力し、抽出方法を指定します。

extractors:
- type: regex
part: header
name: id
group: 1
regex:
- 'Location: /mypage/items\?id=([a-z0-9]+)'

この設定により、Location: /mypage/items?id=XXXX の中の XXXX の部分が抽出され、id という名前の変数に値が格納されます。レスポンスの異なる部分を抽出したい場合には、リファレンスを参考に記述してください。

次に、Step 2. にて抽出した ID を注入するための設定を入力します。削除リクエストのボディ中の id パラメータに注入する場合の設定を以下に示します。

bindings:
- type: body
key: .id
extractorName: id

この設定により、先ほど抽出した id 変数の値が、削除リクエストのボディ中の id パラメータに設定されます。異なるパラメータに注入したい場合には、リファレンスを参考に、key の部分を適切なパラメータ名に置き換えてください。

tip

作成リクエストや削除リクエストにおいて CSRF トークン等が必要な場合には、CSRF トークンを抽出するためのステップの追加が必要です。

以上の設定を入力したら、「保存」ドロップダウンをクリックし、「保存」を選択してください。

次に、Web 診断を実行する手順に進みます。