【JMeter】CSRFトークンの取得とPOSTリクエスト
こんにちは!システム開発部の福井です!
この度、JMeter を使用したシナリオ作成で、CSRF保護されたページからのPOSTリクエストを行うにあたり、何度か403エラーで弾かれてしまったため、その解決方法についてご紹介させていただきます!
本記事では、主に
・CSRFトークンの取得
・取得したトークンを使用したPOSTリクエスト
の2点についてご紹介させていただきます!
※ちなみに、個人的な備忘録も兼ねて、覚えておきたい JMeter の設定をブログ末尾に記載いたしました。これから JMeter を使われる方は最後までお読みいただけますと幸いです。
CSRFトークンの取得
では早速、CSRFトークンの取得方法からご説明いたします。
CSRFトークンを取得するには「正規表現抽出」機能を使用します。
■ 「正規表現抽出」機能の追加
正規表現抽出の追加方法ですが、CSRFトークンを発行している画面表示のHTTPリクエストのサンプラーに対して、
『追加』→『後処理』→『正規表現抽出』の設定を行う事で追加する事ができます。
※例えば、ログイン処理のPOSTリクエストがあり、そのリクエストパラメータでCSRFトークンが必要な場合、事前の「ログイン画面表示」のGETリクエストに対して、正規表現抽出を追加する流れとなります。
追加ができたら以下の画面が表示されますので、各項目の設定を行います。
■「正規表現抽出」の設定
今回は例として以下の様に設定を行いました。設定が必須の項目についてご説明させていただきます。
① Field to check
抽出したい値の対象を選択します。今回は、「Body」を選択してください。
※CSRFトークンを抽出するページのGETリクエストのレスポンスボディを利用するため。
② 参照名
抽出した値(今回はCSRFトークン)が入る変数を入力します。後ほど、POST送信する際のCSRFパラメータの値として使用します。任意の文字列を入力してください。
③ 正規表現
CSRFトークンが入るinputタグを入力します。value属性の値を正規表現で書くことで、CSRFトークンの値を取得できます。
※上記画像の入力内容は一例となります。実際に画面表示のレスポンスで取得できるinputタグの形式に合わせて修正してください。inputタグの形式が異なるとCSRFトークンの値が取得できません(id属性の有無や、name属性の入力ミスなど)。特につまづきやすいポイントになるため、可能であれば、実際にデベロッパーツールでhtml内のinputタグをコピーしてvalue属性の値を修正して利用する事をおすすめいたします。
④ テンプレート
抽出した値の「~番目」を使用するかを指定します。特に指定がなければ、最初に取得した値を使うため、「$1$」を入力してください。
正規表現抽出の設定は以上となります。
取得したトークンを使用したPOSTリクエスト
では、次に取得したCSRFトークンをリクエストパラメータに含めてPOST送信する方法をご紹介いたします。
以下にリクエストパラメータの設定例を掲載いたしました。
設定は非常に簡単で、対象となるPOSTリクエストのサンプラーに「${正規表現抽出で設定した参照名}」の形式でパラメータを設定する事で、取得したCSRFトークンを送る事ができます。
あとは状況に応じて、リクエストヘッダや、その他必要なパラメータを設定して完了となります。
おまけ(覚えておきたいJMeterの設定)
冒頭でご紹介させていただきました通り、JMeterの「覚えておきたい設定」を2つご紹介させていただきます。
■ Basic認証
負荷試験を実施する際、Basic認証が必要な場合は「HTTP認証マネージャ」を使用する事でログインする事ができます。
HTTP認証マネージャは「スレッドグループ」、「シンプルコントローラ」、もしくはBasic認証が必要な「最初のHTTPリクエストのサンプラー」のいずれでも追加が可能です。
『追加』→『設定エレメント』→『HTTP認証マネージャ』で追加する事ができます。
HTTP認証マネージャの追加ができましたら、上記画面が表示されますので、「基底URL」「ユーザー名」「パスワード」を入力し、設定は完了となります。
■ HTTPクッキーマネージャ
続いて、シナリオで cookie 保持が必要な場合についてですが、こちらは、「HTTPクッキーマネージャ」を設定する事で cookie情報の利用が可能となります。
HTTPクッキーマネージャも「スレッドグループ」、「シンプルコントローラ」、「サンプラー」のいずれにも追加が可能で、『追加』→『設定エレメント』→『HTTPクッキーマネージャ』で追加する事ができます。
追加できましたら上記画面が表示されますが、HTTPクッキーマネージャは特段、テストに使用したい値がなければ、このまま利用する事ができます。
※「繰り返しごとにクッキーを破棄しますか?」の項目ですが、こちらはチェックを入れる事でループ毎のクッキーを破棄する事ができます。
※HTTPクッキーマネージャ追加後、シナリオを実行し、リクエストボディで Cookie Data が送られている事が確認できたら設定は完了となります。
最後に
私が所属するシステム開発のサービスサイト「SEKARAKU Lab(セカラク ラボ)」を開設しました。
ビヨンドは、サーバーの設計・構築から運用までをワンストップでお任せいただけますので、サーバーサイド開発でお困りの方はお気軽にお問い合わせください。
SEKARAKU Lab:[https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)
今回は以上となります!
最後までお読みいただきまして、ありがとうございました!